Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] nadpisywanie w pliku tekstowym
Forum PHP.pl > Forum > PHP
funky_beat
Witam,
Staram się zrobic skrypt nadpisujący w pliku tekstowym wybrane elementy, np. drugi znak każdej linijki teksty w pliku tekstowym.
Wykorzystałem funkcję FWRITE ale cos nie działa.

Napisałem takie cos:



  1. <form action="plik.php" method="POST" ENCTYPE="multipart/form-data">
  2. Wybierz plik
  3. <input type="file" name="plik"/>
  4. <input type="submit" name="submit" value="Go!"/>
  5. </form>
  6.  
  7. <?php
  8. if (isset($_POST['submit'])) {
  9.  
  10. $nazwa=$_FILES['plik']['name'];
  11. $plik = file("$nazwa");
  12. $liczeb= count($plik);
  13.  
  14. if($plik) {
  15.  
  16.  
  17. for ($i=1; $i < $liczeb; $i++)
  18. {
  19. $znakwersu = explode('-',$plik[$i]);
  20. echo "<br>".$znakwersu[1];
  21.  
  22.  
  23. $dane = "abc";
  24.  
  25.  
  26. // przypisanie zmniennej $file nazwy pliku
  27. $file = "test.txt";
  28.  
  29. // uchwyt pliku, otwarcie do dopisania
  30. $fp = fopen($file, "a");
  31.  
  32. // blokada pliku do zapisu
  33. flock($fp, 2);
  34.  
  35. // zapisanie danych do pliku
  36. fwrite($plik[$i], $dane);
  37.  
  38. // odblokowanie pliku
  39. flock($fp, 3);
  40.  
  41. // zamknięcie pliku
  42. fclose($fp);
  43.  
  44. }
  45.  
  46.  
  47. }
  48. }
  49. ?>




Czy możecie mi pomoc w tej sprawie?
webdice
Opisz dokładniej co chcesz zrobić.
Speedy
Cytat
Staram się zrobic skrypt nadpisujący w pliku tekstowym wybrane elementy, np. drugi znak każdej linijki teksty w pliku tekstowym.


  1. <?php
  2.  
  3. $sign = '6';
  4. $array = file('w.txt');
  5.  
  6. foreach($array as $line)
  7. {
  8. $newData .= substr_replace($line, $sign, 1, 1);
  9. }
  10.  
  11. $file = fopen('w.txt','w');
  12. fwrite($file, $newData);
  13. fclose($file)
  14.  
  15. ?>


Przykładowa zawartość pliku w.txt:

Kod
abcdef
ghijkl
mnopqr
stuwxy


Przykładowa zawartość pliku w.txt po wykonaniu skryptu:

Kod
a6cdef
g6ijkl
m6opqr
s6uwxy
funky_beat
to co napisał SPEEDY jest najbliższe prawdy aczkolwiek nie do końca, ponieważ tablica na której działam jest zczytywana z pliku txt i wygląda tak:

  1. <?php
  2. 1 85 119 30 26 17 0.5
  3. 1 90 64 61 32 13 0.5
  4. 1 90 47 28 15 18 0.5
  5. 2 93 50 18 25 17 6
  6. 2 91 68 14 20 19 4
  7. 2 90 52 10 17 12 5
  8. 2 90 63 45 24 85 1
  9. 2 95 93 21 27 47 6
  10. 2 84 73 46 32 39 4
  11. ?>


jak widać każdy wers tablicy składa się z wartości oddzielonych spacjami,
sęk w tym że należy pozostawić pierwszą kolumnę bez zmian natomiast a resztę należy przekształcić i nadpisać:

udało mi się wykonać pierwszą część zadania, czyli pozostawienie pierwszej kolumny bez zmian i przekształcenie pozostałych elementów za pomocą skryptu:

  1. <?php
  2. $plik = file("plik.txt");
  3. $liczeb = count($plik);
  4.  
  5.  
  6. for ($i=0; $i < $liczeb; $i++)  {
  7. $wers = explode(" ",$plik[$i]);
  8. echo $wers[0];
  9.  
  10. for ($klasa=1; $klasa < 7; $klasa++)
  11. {
  12.  
  13. $stand=($wers[$klasa]-5)/10;
  14. echo " ".round ($stand, 1);
  15. }
  16. ?>



za pomocą tego skryptu mogę niestety tylko przekształcić wartości w poszczególnych wersach tablicy. po wyświetleniu wygląda to mniej więcej tak:

  1. <?php
  2. 1 8 11.4 2.5 2.1 1.-0.5
  3. 1 8.5 5.9 5.6 2.7 0.-0.5
  4. 1 8.5 4.2 2.1 1.-0.5
  5. 2 8.8 4.5 1.2 1.2 0.1
  6. 2 8.6 6.3 0.9 1.5 1.-0.1
  7. 2 8.5 4.7 0.5 1.2 0.0
  8. 2 8.5 5.4 1.8 -0.4
  9. 2 9 8.8 1.6 2.2 4.2 0.1
  10. 2 7.9 6.8 4.1 2.7 3.4 -0.1
  11. ?>



pierwsza kolumna oraz odstępy między poszczególnymi wartościami są zachowane ale jak to zapisać do pliku ? sad.gif

możliwe że problem tkwi w konstrukcji pętli bo za każdym razem gdy chcę wyciągnąć te wartości z pętli i połączyć je funkcją implode to w pliku nadpisuje się tylko ostatnia wartość każdego wersu

Czy możecie mi pomóc? webdicepl pomożesz? sad.gif

ok, juz sobie poradziłem, tzn taki brzydki sposób troche ale skuteczny, mianowicie:

po wyświetleniu każdego znaku robie zapis do pliku oddzielnego znaku.

webdicepl jeżeli widze ze czytasz post-a , jak masz ładniejszy sposób to napisz smile.gif
webdice
  1. <?php
  2.  
  3. $file = file ('liczby.txt');
  4.  
  5. $newFileContent = '';
  6.  
  7. foreach ($file as $value)
  8. {
  9. $line = explode (' ', $value);
  10.  
  11. for ($i = 0; $i < count ($line); $i++)
  12. {
  13.  if ($i == 0)
  14.  {
  15. $newFileContent .= $line[$i] . ' ';
  16. }
  17. else
  18. {
  19. $newFileContent .= round (($line[$i] - 5) / 10, 1) . ' ';
  20. }
  21. }
  22.  
  23. $newFileContent .= "\n";
  24. }
  25.  
  26. file_put_contents ('liczby.txt', $newFileContent);
  27.  
  28. ?>
funky_beat
kurcze, dla Ciebie chyba nie ma rzeczy niemozliwych do wykonania w php smile.gif

ogromne dzieki WEBDICEPL smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.