Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak wyciagnac dane z pliku A i zapisać do pliku B
Forum PHP.pl > Forum > Przedszkole
majka111
Witam serdecznie


dopadła mnie dzisiaj potrzeba kombinowania smile.gif

a że chyba sam nic nie wymyślę zwracam się o pomoc


o co chodzi smile.gif


mam plik tekstowy tytuł.txt z tytułami - kazdy tytuł w nowej linii jest ich powiedzmy 15 sztuk

potrzebuje uruchomić plik php który wyciagnie z tego pliku tytuły


jeden po drugim dodając na przykład "cz2"


- przykład : "robin hood"


i zapisze je do nowego pliku tekstowego nowy_tytuł.txt " id" "robin hood cz2"


plik do zapisania ma wygladać chyba ......... tak:
  1.  
  2. //sam wpisuje mumer od którego ma zacząc liczyć bo mam np 56 pozycji i chce dodać następne
  3. $id ="56" ;
  4.  
  5. // otwiera plik z nowymi pozycjami
  6. $plik = 'tytul.txt' ;
  7.  
  8. //pobiera kolejne wiersze
  9. $tytul = file ($plik) ;
  10.  
  11.  
  12. TUTAJ NIE WIEM JAK ZROBIĆ żeby pobierał - wiersz -- ZAPISYWAŁ GO
  13.  
  14. I wracał do nastepnego wiersza (Pętla)
  15.  
  16.  
  17.  
  18. // sam wpisuje jaki dodatek do tytułu
  19. $czesc = "cz2" ;
  20.  
  21. //zapisuje w jednej linii
  22. $efekt = "( $id ,$tytul ,$czesc),"."\n" ;
  23.  
  24. // przypisanie zmniennej $file nazwy pliku
  25. $file = "nowy_tytul.txt";
  26.  
  27. // uchwyt pliku, otwarcie do dopisania
  28. $fp = fopen($file, "a");
  29.  
  30. // blokada pliku do zapisu
  31. flock($fp, 2);
  32.  
  33. // zapisanie danych do pliku
  34. fwrite($fp, $dane);
  35.  
  36. // odblokowanie pliku
  37. flock($fp, 3);
  38.  
  39. // zamknięcie pliku
  40. fclose($fp);
  41.  



moze jakas prawie gotowa podpowiedz jak to zrobic?

pozdrawiam i dziekuje za wszelką pomoc
Mary$
Hej,

według mnie powinno Ci pomóc coś takiego:

  1. <?php
  2. /* zmienne (a wlasciwie stale) konfiguracyjne */
  3. $id = 56;
  4. $fname = "tytul.txt";
  5. $new_fname = "nowy_tytul.txt";
  6. $part = "cz2";
  7.  
  8. /* odczyt z pliku zrodlowego */
  9. $titles = file ($fname);
  10.  
  11. /* przetwarzanie pliku zrodlowego
  12.  * w zmiennej $output beda nowe dane
  13.  * z czesciami itp. */
  14. $output = '';
  15. $count = count($titles);
  16. for ($i=0;$i<$count;$i++)
  17. {
  18. $output .= '(' . $id . ' ' . $titles[$i] . ' ' . $part. ')' . "\n";
  19. $id++; //zwiekszenie nr pozycji
  20. }
  21.  
  22. /* zapis do pliku docelowego*/
  23. $fp = fopen($new_fname, "a");
  24. fwrite($fp, $output);
  25. fclose($fp);
  26. ?>


To jest mniej-więcej to, co było w Twoim kodzie, ale pozwoliłem sobie na małe modyfikacje:
1. zmienna $id zwiększa się za każdym obrotem pętli, bo skoro to jest jakaś lista pozycji, to zapewne kolejne powinny mieć wyższe numery?
2. usunąłem flock, bo ja osobiście go nigdy nie używałem i jeżeli nie ma ryzyka, że dwa skrypty będą jednocześnie chciały "dobrać się" do tego samego pliku, to nie musisz tego używać smile.gif

Ponadto założyłem, że chcesz przetworzyć WSZYSTKIE linie z pliku źródłowego (a nie np. począwszy od linii 56).

Mam nadzieję, że okazałem się pomocny smile.gif

Tak w ogóle, to gdzie tu jest nawiązanie do MySQL?
majka111
Cytat(Mary$ @ 17.02.2013, 22:29:42 ) *
Hej,

według mnie powinno Ci pomóc coś takiego:


To jest mniej-więcej to, co było w Twoim kodzie, ale pozwoliłem sobie na małe modyfikacje:
1. zmienna $id zwiększa się za każdym obrotem pętli, bo skoro to jest jakaś lista pozycji, to zapewne kolejne powinny mieć wyższe numery?
2. usunąłem flock, bo ja osobiście go nigdy nie używałem i jeżeli nie ma ryzyka, że dwa skrypty będą jednocześnie chciały "dobrać się" do tego samego pliku, to nie musisz tego używać smile.gif

Ponadto założyłem, że chcesz przetworzyć WSZYSTKIE linie z pliku źródłowego (a nie np. począwszy od linii 56).

Mam nadzieję, że okazałem się pomocny smile.gif

Tak w ogóle, to gdzie tu jest nawiązanie do MySQL?


serdeczne dzieki


Jak sie człowiek do końca nie zna to i MySQL zobaczy

wszystkie Twoje założenia były słuszne smile.gif

jest właśnie tak jak miało być

jest mały ZONK ale ...bede próbował go odszukać smile.gif i zmienić

wyswietla mi tak:

(61 RobinHood
cz2)

a wcześniej miałem w założeniu

(61,RobinHood,cz2)

Wielkie dzieki
Mary$
aaa no właśnie, bo zapomniałem, że to przenosi całą linię z pliku źródłowego, zatem przenosi również znak nowej linii smile.gif

zamień:
  1. $output .= '(' . $id . ' ' . $titles[$i] . ' ' . $part. ')' . "\n

na:
  1. $output .= '(' . $id . ', ' . substr($titles[$i],0,-1) . ', ' . $part. ')' . "\n


ta modyfikacja pozwoli Ci na wycięcie ostatniego znaku z tytułu - znaku nowej linii wink.gif

no i wcześniej usunąłem te przecinki, teraz dodałem je z powrotem smile.gif
majka111
Cytat
ta modyfikacja pozwoli Ci na wycięcie ostatniego znaku z tytułu - znaku nowej linii wink.gif




dalej łamie linie


Mary$
a jak dokładnie wygląda struktura pliku źródłowego? Podaj przykładowe kilka wierszy na zasadzie kopiuj-wklej
majka111
Cytat
a jak dokładnie wygląda struktura pliku źródłowego? Podaj przykładowe kilka wierszy na zasadzie kopiuj-wklej



jedyny kod jaki mam to to co napisałeś smile.gif


plik tekst tworzę recznie kopiuj wklej kazdy w kolejnej lini

i efekt

mam w postaci ze złamaną linią, ale jestem i tak zadowolony smile.gif bo mam mnóstwo zaoszczędzonej pracy


teraz tylko uzywam "delete" wink.gif i linie są równe


mi to nie przeszkadza bo z pliku B tez robie kopiuj wklej - recznie


że tak jak mówie JESTEM wdzięczny wink.gif


Mary$
Trzeba by rozbić ten tytuł na poszczególne znaki i zobaczyć co właściwie siedzi tam na końcu, ale skoro pasuje Ci wersja obecna, to ok 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.