Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Łączenie plików każda linijka po każdej linijce
Forum PHP.pl > Forum > Przedszkole
d0m1n1k_
Witam,
próbuję połączyć pliki:
PLIKA (1A, 1B, 1C, 1D...)
PLIKX (2A, 2B, 2C, 2D...)
w następujący sposób:
file (1A2A, 1A2B, 1A2C, 1A2D, 1B2A, 1B2B, 1B2C, 1B2D...)

Niestety wychodzi mi tylko:
file (1A2A, 1A2B, 1A2C, 1A2D)
i kończy pętle.

Tak wygląda kod:

  1. <?php
  2.  
  3. $plikA = file('litery.txt');
  4. $plikX = file('cyfry.txt');
  5.  
  6. $file = "wyjscie.txt";
  7. $i = 0;
  8.  
  9. foreach($plikX as $x)
  10. {
  11. $i++;
  12. list($wX) = explode('\n', trim($x));
  13.  
  14. $j = 0;
  15.  
  16. foreach($plikA as $qe)
  17. {
  18. $j++;
  19. list($wA) = explode('\n', trim($qe));
  20.  
  21. $dane0 = "$wA" . "$wX" . " \n";
  22. }
  23.  
  24. $outputter = $dane0;
  25. $fp = fopen($file, "a");
  26. flock($fp, 2);
  27. fwrite($fp, $outputter);
  28. flock($fp, 3);
  29. fclose($fp);
  30. }
  31.  
  32. ?>


Gdzie popełniam błąd?
Będę bardzo wdzięczny za pomoc i wskazówki.
nospor
1) Patrzyles w ogole co zawierają zmienne na poszczegolnych etapach??
Chocby tu: foreach($plikX as $x)
przecież $x to jest juz kolejna linia i nie ma sensu robic explode po x po nowej linii, bo x jest nową linią.

2) Poza tym, jak chcesz w petli coś dopisywac do zmiennej to sie to robi tak:
$zm.='dopisz';
a nie tak:
$zm= 'nadpisz';

Kluczową role gra tu KROPKA, ktora łączy teksty a nie nadpisuje.
d0m1n1k_
Jeśli mam być szczery to zabiłeś mi klina.
Nie wiem co mam zrobić.
Usunąłem "as $x" i nie działa.
nospor
Nigdzie nie kazalem ci usuwac as $x. Kazalem ci sprawdzic co zawierają zmienne na ktorych operujesz.

Dodatkowo wyraznie napisalem, ze masz dane dopisywac a nie nadpisywac...
o tu: $dane0 = "$wA" . "$wX" . " \n";
d0m1n1k_
Zmienniłem na:
  1. <?php
  2.  
  3. $plikA = file('litery.txt');
  4. $plikX = file('cyfry.txt');
  5.  
  6. $file = "baza.txt";
  7. $i = 0;
  8.  
  9. foreach($plikX as $x)
  10. {
  11. $i++;
  12. list($wX) = explode('\n', trim($x));
  13. echo "$wX<br />$x<br />";
  14.  
  15. $j = 0;
  16.  
  17. foreach($plikA as $a)
  18. {
  19. $j++;
  20. list($wA) = explode('\n', trim($a));
  21. echo "<font color=\"red\">$wA</font><br />";
  22. echo "<font color=\"blue\">$a</font><br />" . "\n";
  23.  
  24. }
  25. }
  26.  
  27. ?>


i wyszło:

A1
A1
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
A2
A2
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
A3
A3
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
A4
A4
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
A5
A5
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
A6
A6
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
A7
A7
B1
B1
B2
B2
B3
B3
B4
B4
B5
B5
nospor
No i widac wyraźnie, że $x jest już tym czego szukasz i bezsensem jest jeszcze jej explodowanie....
list($wX) = explode('\n', trim($x)); to jest bezsensem. Staraj sie czytac co ci piszą.

Pisalem ci rowniez, o DOPISYWANIU a nie NADPISYWANIU
d0m1n1k_
no i teraz wiem co i jak :-)
A jako bonusowe pytanie, chciałbym spytać jak zrobić, aby działać na więcej jak dwóch plikach?
Osobna pętla dla każdego typu połączenia?

Przykład

PlikA, PlikB, PlikC, PlikD

Wyniki:
PlikAPlikB, PlikAPlikC, PlikAPlikD, PlikAPlikA ... PlikAPlikBPlikCPlikD
nospor
Cytat
no i teraz wiem co i jak :-)
Tylko ze to wszystko miales juz napisane w pierwszym poscie.
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.