Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dodawanie i usuwanie danych z pliku
Forum PHP.pl > Forum > PHP
dublinka
Witam,

Mam plik z taka budowa:

  1. niewazne||14||14||28


Budowa tego po tym NIEWAZNE moze byc losowa.Moze zawierac taka jak teraz ale moze miec tylko jedna:
  1. niewazne||14

dwie:
  1. niewazne||14||28

lub i trzy:
  1. niewazne||14||14||28


Jak zastapic jedna z nich ale nie linie tylko pomiedzy || i potem zapisac ?

jesli przesylam formularzem 14 a tam jest juz 14 i nie moze byc zastapiona lecz dopisana i miesz postac

wczesniej
  1. niewazne||14

lub
  1. niewazne||14||14


lub jeszcze bardziej zamieszane

Moga byc max 3 wiecej nie

np. 14||14||28 lub 28||14|14 lub 14||14 lub 28 samo lub 14 samo
to jest dla mnie nie do przeskoczenia.

jak to zrobic ?

Inne rozwiazanie budowy nie wchodzi w gre bo duzo byloby do zmiany. Niby proste ale kurka nie wiem jak to ugrysc.

Bardzo Was prosze o pomoc.
mar1aczi
Jakoś te dane wczytujesz. "Wysyłając" formularz powinno być wiadomo, który wiersz (linię) modyfikujesz. Po otrzymaniu danych z formularza modyfikujesz ową linię (w pamięci, może jest to tablica) a następnie nadpisujesz (tylko tą linię) w pliku (bądź zapisujesz całą tablicę do pliku).
W Twoim opisie brak szczegółów jak dane są wczytywane/przechowywane.
_Borys_
txt.txt
Kod
niewazne||14||14||28
wazne||14||14||28
niewazne||14||14||28


  1. <?php
  2.  
  3. $search = 'wazne';
  4. $dat = '14';
  5. $file = file('txt.txt');
  6. foreach ($file as $line)
  7. {
  8. $tab[] = explode('||', rtrim($line));
  9. }
  10. for ($i = 0, $x = count($tab); $i < $x; $i++)
  11. {
  12. if ($tab[$i][0] == $search)
  13. {
  14. // jeśli $dat jest w tablicy to dodajemy na końcu
  15. if (in_array($dat, $tab[$i]))
  16. {
  17. array_push($tab[$i], $dat);
  18. }
  19. }
  20. $tab[$i] = implode('||', $tab[$i]);
  21. }
  22. file_put_contents('txt.txt', $ready = implode("\r\n", $tab));
  23. echo '<pre>';
  24. echo $ready;
  25. echo '</pre>';
  26.  
  27. ?>

Opcja druga z zamianą na konkretnej pozycji:
  1. <?php
  2.  
  3. $search = 'wazne';
  4. $poz = 2; //przykładowa pozycja w linii do zamiany
  5. $dat = '77';
  6. $file = file('txt.txt');
  7. foreach ($file as $line)
  8. {
  9. $tab[] = explode('||', rtrim($line));
  10. }
  11. for ($i = 0, $x = count($tab); $i < $x; $i++)
  12. {
  13. if ($tab[$i][0] == $search)
  14. {
  15. if ($tab[$i][$poz] == $dat) //jeśli już jest to dodajemy na końcu
  16. {
  17. array_push($tab[$i], $dat);
  18. } else
  19. {
  20. $tab[$i][$poz] = $dat; //jeśli brak to zamieniamy na pozycji $poz w tablicy
  21. }
  22. }
  23. $tab[$i] = implode('||', $tab[$i]);
  24. }
  25. file_put_contents('txt.txt', $ready = implode("\r\n", $tab));
  26. echo '<pre>';
  27. echo $ready;
  28. echo '</pre>';
  29.  
  30. ?>
Pilsener
Borys, to raczej plik danych a nie konfiguracyjny więc użycie file odpada ze względu na zużycie pamięci.

Dopisywanie do pliku jest proste:
  1. //inaczej ktoś doda || i nam się rozleci
  2. $tresc = str_replace("|", "\\| ", $tresc);
  3.  
  4. $uchwyt=fopen($pliczek, 'a');
  5. flock($uchwyt, 2);
  6. $wpis = 'nick||'.$tresc.'||'.time().'||'.$nr."\r\n";
  7. fputs($uchwyt, $wpis);
  8. flock($uchwyt, 3);
  9. fclose($uchwyt);


Z edycją gorzej, trzeba parsować plik linia po linii podmieniając szukaną linię na nową. Plik obrabia się mniej więcej tak:
  1. $p_newsy = fopen('newsy.txt','r');
  2. while(!feof($p_newsy)){
  3. $linia = fgets($p_newsy);
  4. echo $linia.'<br />';
  5. }


dublinka
Cytat(Pilsener @ 20.02.2013, 22:19:00 ) *
Borys, to raczej plik danych a nie konfiguracyjny więc użycie file odpada ze względu na zużycie pamięci.
Jakiej pamieci biggrin.gif To zaledwie kilka kb w pliku biggrin.gif
A z tym przykladem to pojechales. Wogole bez sensu.Nie rozumiesz chyba pytania.


Juz jest mniej wiecej ok ale dochodze do momentu samego podmienienia linii konkretnej i nie wiem jak to zrobic.

Mam pole select z 2 mozliwosciami: 14, 28
Teraz w pliku powiedzmy jest tak:

  1. niewazne||14||28
  2. niewazne||14
  3. niewazne||14||28||14


i potrzebuje zmienic linie 2 czyli index 1 na taki schemat:

  1. niewazne||14||14


Teraz posylam z pola select 14 (ta druga 14 ktora ma sie zapisac w pliku)
Samo pobranie linii i dodanie kolejnego czyli w tym momencie 14 jest zrobione lecz nie wiem jak to podmienic i zapisac.

Ktos pomoze ? Sam zapis i podmiana. Czyli druga linia przykladowo.

  1. $foo = file($f);
  2. unset($foo[$u]);
  3. $f = fopen($f,'w');
  4. flock($f, LOCK_EX);
  5. fwrite($f,str_replace('\r','',join('',$foo)));
  6. flock($f ,LOCK_UN);
  7. fclose($f);


To przyklad do usuniecia linii. unset($foo[1]) usuwa linie z indexem 1 czyli ta o ktora mi chodzi ale to usuwa tylko.Jak ją podmienic questionmark.gif z trescia przykladowo taka ?

  1. $nowatresc="niewazne||14||14";
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.