Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyciagnieciem danych z pliku
Forum PHP.pl > Forum > PHP
dublinka
Witam,
Mam plik z danymi. Dane zapisuja sie za kazdym razem do tego samego pliku i jest ich zawsze 10 czyli jesli zrobie to 10 razy bedzie tych linii 100 (logiczne chyba smile.gif)
Problem w tym ze nie potrafie przefiltrowac danych czyli pobrac konkretnych linii w petli do dalszej obrobki.

<?
$file = file('articles/3.dat');

for($i=0;$i<count($file);$i++)

{

print $file[$i] . '<br>';

}
?>


to mi pokazuje wszystko co mam w pliku ale jak zrobic zebym mogl w tej petelce pobrac 10 (10 to tylko przyklad bo chce pobrac wszystkie linie bo petla pobiera wszystko tyle ze konkretne dane z wpisu sa wlasnie podzielone co 10 linii) linii i mogl je obrabiac ?


Gdyby sie zapisywaly dane wszystkie w jednej linii z jakims separatorem np. chr(15) to prosta rzecz bo pobieram przez


list($dane1,$dane2,$dane3,$dane4,$dane5,$dane6,$dane7,$dane8,$dane9,$dane10) = split("[".chr(15)."]",$file[$i]);


i mam wtedy w kazdej zmiennej dane ale w tym przypadku nie wiem a teznie moge zmienic metody zapisu bo juz danych jest zbyt wiele i musialbym siedziec i zmieniac z miesiac sama strukture w plikach
netmare
nie bardzo rozumiem w czym problem, może po prostu wystarczy Ci fgetss()
dublinka
Cytat(netmare @ 22.02.2008, 10:01:34 ) *
nie bardzo rozumiem w czym problem, może po prostu wystarczy Ci fgetss()


Nie, sluchaj. Mam petle for i ona misi byc. Dane w pliku zapisywane sa z formularza z 10 pol wiec 10 danych leci na kazda linie z osobna. Tych danych jest za kazdym razem wiecej o 10 czyli jak juz napisalem moze ih byc 100 lub 10 000 linii - bo przeciez zapisuje sie caly czas. Problem w tym ze podczas pobierania danych petla z tablicy wysw mi wszystkie dane a ja potrzebuje nie wyswietlic od razu tych linii lecz pobrac je do poszczegolnych zmienych i je obrobic. Dlaczego ? Wstawiam w petle kod html (tabela i komorki i do kazdej z komorek chce wstawic te poszczegolne zmienne a w tym przypadku nie mam takiej mozliwosci)

czyli tak jak tam jest $zmienna[$i] zawiera cala tablice ale teraz potrzebuje ja rozbic/przypisac kazdej z tych linii (czyli z kazdego obrotu petli) zmienne dla kazdej z tych linii
np.

mam dane:

imie
email
data
temat
tresc
nick
nr
nr2
id
id2
tutaj kolejne 10 danych i tak w kolko...


teraz potrebuje pobrac kazda linie z osobna ale z tego przykladu jak w temacie glownym czyli przez for.

Jak rozbic ta tablice tak aby przypisac kazdej z miennej dana linie - 10 zmiennych dla kazdej linii.
Probowalem tablice asocjacyjna ale nic z tego
Kowalikus
  1. <?php
  2. $file = file('articles/3.dat');
  3.  
  4. $tmpArray = array();
  5.  
  6. for($i=0;$i<count($file);$i++)
  7.  
  8. {
  9.  
  10. if ($i % 10 == 0) 
  11. {
  12. $tmpArray [] = array();
  13. }
  14.  
  15. $tmpArray[count($tmpArray )-1][] = $file[$i];
  16. }
  17.  
  18.  
  19. //sprawdź sobie jak teraz tablica wygląda
  20.  
  21. echo '<pre>';
  22. print_r($tmpArray);
  23. echo '<pre>';
  24. ?>


Pisane z ręki, może coś nie działać
dublinka
To moze ja podam moj caly przyklad. Jest to stronicowanie danych z tego pliku 3.dat
Twoja tablica jest ok ale jakos mi to nie dziala :/


<?
############################################################
# wyswietlenie odpowiedzi
############################################################

$path_r = 'articles';
$rozsz = '.dat';
$wyswietlaj=40; # podzial na kartki
$ile_linkow=30; # -||-
if(file_exists($path_r . '/3.dat' )): #1

$FileToReadReply=file($path_r.'/3.dat');
if(empty($HTTP_GET_VARS['czytaj']))
{
$czytaj=0;
}
else{
$czytaj=$HTTP_GET_VARS['czytaj'];
}
if(empty($HTTP_GET_VARS['dalej']))
{
$dalej=1;
}
else{
$dalej=$HTTP_GET_VARS['dalej'];
}
$nr=$HTTP_GET_VARS['czytaj'];
if(empty($HTTP_GET_VARS['czytaj'])){
$nr=0;
}
$tmpArray = array();
$u=1;
for($i=$czytaj;$i<$czytaj+$wyswietlaj;$i++)
{

if(!empty($FileToReadReply[$i]))
{
// print $FileToReadReply[$i]."<br>";
if ($i % 10 == 0)
{
$tmpArray [] = array();
}

$kk = $tmpArray[count($tmpArray )-1][] = $FileToReadReply[$i];
print $kk[0]."<br>";
}
}


$out="";
for($i=$dalej;$i<$dalej+$ile_linkow;$i++)
{
$k=($i-1)*$wyswietlaj;
if($k<count($FileToReadReply))
{
if($k==$czytaj)
{
$out.=" [$i] ";
}
else{
$out.=" <a class=\"l\" href=\"$PHP_SELF?id=".$HTTP_GET_VARS['id']."&czytaj=$k&dalej=$dalej\">[$i]</a> ";
}
}
}
if($dalej>1)
{
$cz=($dalej-1)*$wyswietlaj-$wyswietlaj;
$dal=$dalej-$ile_linkow;
print " <a class=\"l\" href=\"$PHP_SELF?f=".$HTTP_GET_VARS['id']."&czytaj=$cz&dalej=$dal\"><<<</a>";
}
else{
print "<font class=\"gl_data\"><<< </font>";
}
print "<font class=\"gl_data\">".$out."</font>";
if($k+$wyswietlaj<count($FileToReadReply))
{
$cz=$k+$wyswietlaj;
$dal=$dalej+$ile_linkow;
print " <a class=\"l\" href=\"$PHP_SELF?id=".$HTTP_GET_VARS['id']."&czytaj=$cz&dalej=$dal\">>>></a> ";
}
else{
print "<font class=\"gl_data\"> >>></font>";
}
else:
print 'Brak dokumentu';
endif;
?
Kowalikus
Nie o takie coś Ci chodziło?

  1. <?php
  2.  
  3. $FileToReadReply[] = 'imie';
  4. $FileToReadReply[] = 'email';
  5. $FileToReadReply[] = 'data';
  6. $FileToReadReply[] = 'temat';
  7. $FileToReadReply[] = 'tresc';
  8. $FileToReadReply[] = 'nick';
  9. $FileToReadReply[] = 'nr';
  10. $FileToReadReply[] = 'nr2';
  11. $FileToReadReply[] = 'id';
  12. $FileToReadReply[] = 'id2';
  13.  
  14.  
  15. $FileToReadReply[] = '2imie';
  16. $FileToReadReply[] = '2email';
  17. $FileToReadReply[] = '2data';
  18. $FileToReadReply[] = '2temat';
  19. $FileToReadReply[] = '2tresc';
  20. $FileToReadReply[] = '2nick';
  21. $FileToReadReply[] = '2nr';
  22. $FileToReadReply[] = '2nr2';
  23. $FileToReadReply[] = '2id';
  24. $FileToReadReply[] = '2id2';
  25.  
  26.  
  27. $FileToReadReply[] = '3imie';
  28. $FileToReadReply[] = '3email';
  29. $FileToReadReply[] = '3data';
  30. $FileToReadReply[] = '3temat';
  31. $FileToReadReply[] = '3tresc';
  32. $FileToReadReply[] = '3nick';
  33. $FileToReadReply[] = '3nr';
  34. $FileToReadReply[] = '3nr3';
  35. $FileToReadReply[] = '3id';
  36. $FileToReadReply[] = '3id3';
  37.  
  38. $FileToReadReply[] = '4imie';
  39. $FileToReadReply[] = '4email';
  40. $FileToReadReply[] = '4data';
  41. $FileToReadReply[] = '4temat';
  42. $FileToReadReply[] = '4tresc';
  43. $FileToReadReply[] = '4nick';
  44. $FileToReadReply[] = '4nr';
  45. $FileToReadReply[] = '4nr4';
  46. $FileToReadReply[] = '4id';
  47. $FileToReadReply[] = '4id4';
  48.  
  49. $FileToReadReply[] = '5imie';
  50. $FileToReadReply[] = '5email';
  51. $FileToReadReply[] = '5data';
  52. $FileToReadReply[] = '5temat';
  53. $FileToReadReply[] = '5tresc';
  54. $FileToReadReply[] = '5nick';
  55. $FileToReadReply[] = '5nr';
  56. $FileToReadReply[] = '5nr5';
  57. $FileToReadReply[] = '5id';
  58. $FileToReadReply[] = '5id5';
  59.  
  60. $FileToReadReply[] = '6imie';
  61. $FileToReadReply[] = '6email';
  62. $FileToReadReply[] = '6data';
  63. $FileToReadReply[] = '6temat';
  64. $FileToReadReply[] = '6tresc';
  65. $FileToReadReply[] = '6nick';
  66. $FileToReadReply[] = '6nr';
  67. $FileToReadReply[] = '6nr6';
  68. $FileToReadReply[] = '6id';
  69. $FileToReadReply[] = '6id6';
  70.  
  71. $FileToReadReply[] = '7imie';
  72. $FileToReadReply[] = '7email';
  73. $FileToReadReply[] = '7data';
  74. $FileToReadReply[] = '7temat';
  75. $FileToReadReply[] = '7tresc';
  76. $FileToReadReply[] = '7nick';
  77. $FileToReadReply[] = '7nr';
  78. $FileToReadReply[] = '7nr7';
  79. $FileToReadReply[] = '7id';
  80. $FileToReadReply[] = '7id7';
  81.  
  82.  
  83.  
  84.  
  85. $wyswietlaj=30; # podzial na kartki
  86. $ile_linkow=5; # -||-
  87.  
  88.  
  89.  
  90. $czytaj=0;
  91. $dalej=1;
  92.  
  93. $nr=$czytaj;
  94.  
  95.  
  96. $tmpArray = array();
  97. $u=1;
  98. for($i=$czytaj;$i<$czytaj+$wyswietlaj;$i++) 
  99. {
  100. if(!empty($FileToReadReply[$i]))
  101. {
  102. // print $FileToReadReply[$i]."<br>";
  103. if ($i % 10 == 0)
  104. {
  105.  
  106.  
  107.  
  108. $tmpArray[] = array();
  109. }
  110. $kk = $tmpArray[count($tmpArray )-1][] = $FileToReadReply[$i];
  111.  
  112.  
  113. }
  114.  
  115.  
  116.  
  117.  
  118. }
  119.  
  120.  
  121.  
  122. foreach ($tmpArray as $key=>$value) 
  123. {
  124. echo implode(' ', $value ) . '<br/>';
  125. }
  126.  
  127.  
  128. $out="";
  129. for($i=$dalej;$i<$dalej+$ile_linkow;$i++)
  130. {
  131. $k=($i-1)*$wyswietlaj;
  132. if($k<count($FileToReadReply))
  133. {
  134. if($k==$czytaj)
  135. {
  136. $out.=" [$i] ";
  137. }
  138. else{
  139. $out.=" <a class=\"l\" href=\"$PHP_SELF?id=".$HTTP_GET_VARS['id']."&czytaj=$k&dalej=$dalej\">[$i]</a> ";
  140. }
  141. }
  142. }
  143. if($dalej>1)
  144. {
  145. $cz=($dalej-1)*$wyswietlaj-$wyswietlaj;
  146. $dal=$dalej-$ile_linkow;
  147. print " <a class=\"l\" href=\"$PHP_SELF?f=".$HTTP_GET_VARS['id']."&czytaj=$cz&dalej=$dal\"><<<</a>";
  148. }
  149. else{
  150. print "<font class=\"gl_data\"><<< </font>";
  151. }
  152. print "<font class=\"gl_data\">".$out."</font>";
  153. if($k+$wyswietlaj<count($FileToReadReply))
  154. {
  155. $cz=$k+$wyswietlaj;
  156. $dal=$dalej+$ile_linkow;
  157. print " <a class=\"l\" href=\"$PHP_SELF?id=".$HTTP_GET_VARS['id']."&czytaj=$cz&dalej=$dal\">>>></a> ";
  158. }
  159. else{
  160. print "<font class=\"gl_data\"> >>></font>";
  161. }
  162.  
  163. ?>
dublinka
no ok. Dzialac dziala tz nsie wysw tylko dalej sie tylko wysw. a ja potrzebuje obrabiac te linie
netmare
Nie twierdze, że to jest lepsze niż to co kolega wymyślił, ale ja i tak bym to robił przez fgetss
while(!feof(....))
{
for($i=1;$i<=10;$i++)
$array[]=fgetss(....);
$final[]=$array;
}

to byś wiedziała co i jak.

A zaczynając od początku, to użyłbym funckji serialize przy zapisie i unserialize przy odczycie i już w ogóle nie byłoby żadnego problemu.
kszychu
1. Proszę... BARDZO PROSZĘ!!! Wręcz tak bardzo, że aż nalegam, poprawić bbcode!
2. Jeśli chcesz tylko co dziesiątą linię, to przeskakuj o dziesięć w pętli a nie o 1
  1. <?php
  2. for($i=$czytaj;$i<$czytaj+$wyswietlaj;$i+=10)
  3. ?>
dublinka
Nie chodzi mi o co dziesiata linie.
Moze inaczej. Moze teraz mnie zrozumiecie.

Mam dane w pliku po  kolei czyli kazda dana w osobnej linii. Z jednego zapisu czyli po dodaniu artykulu jest ich 10. Po nastepnym dodaniu 20 itd...

Teraz chce pobrac je i obrobic. Gdyby byly w jednej linii i oddzielone jakims separatorem to nie mialbym problemu bo pobralbym linie (tez np. przez for) rozbil przez explode ten separator i np. byloby tak

CODE
<BR><BR>$file = file(plik);<BR>for........<BR>$ex = explode('[*]', $file[$i]);<BR><BR>$ex[0] = zawiera pierwsza linie<BR>$ex[1] = druga<BR>itd<BR>


Problem mam z dopisaniem zmiennych w podobnym schemacie bo tam nie jest tylko jedna linia ale z kazdego zapisu 10 ale nie chce pobrac tylko 10-ciu jak napisales tylko wszystkie
Kowalikus
No to przecież zarówno ja jak i netmare podaliśmy Ci rozwiązanie.

  1. <?php
  2. for($i=$czytaj;$i<$czytaj+$wyswietlaj;$i++) 
  3. {
  4. if(!empty($FileToReadReply[$i]))
  5. {
  6. // print $FileToReadReply[$i]."<br>";
  7. if ($i % 10 == 0)
  8. {
  9. $tmpArray[] = array();
  10. }
  11.  
  12. }
  13.  
  14.  
  15.  
  16.  
  17. }
  18.  
  19.  
  20.  
  21. foreach ($tmpArray as $key=>$value) 
  22. {
  23. echo $value[0]; //wyswietli imie
  24. echo $value[1]; //wyswietli email
  25. //...
  26. echo $value[9]; //wyswietli id2
  27. }
  28. ?>
kszychu
Prosiłem o coś, olano mnie. Mszczę się więc (a mściwy jestem straszliwie) i zamykam temat.
Od autora czekam na PW z informacją dlaczego mnie olał, solennym przyrzeczeniem poprawy i informacją jak chce to naprawić.
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.