ugrás a tartalomhoz

Tabulátorral elválasztott szövegfájl kiiratása PHP-ben

Anonymous · 2006. Szep. 14. (Cs), 21.03
Sziasztok!
Van egy txt fájlom amiben a szavak \t-al vannak elválasztva,
ezt szeretném kiíratni a következő képen:
  1. <?php  
  2.     $file = "asd.txt";  
  3.   
  4.     if ( file_exists($file) ) {  
  5.         $fa = fopen($file'r');  
  6.         $sor = fgets($fa, 1024);  
  7.   
  8.             $szoveg_tomb = explode("\t"$sor)  
  9.   
  10.                 for ( $i=0; $i < count($szoveg_tomb); $i++) {  
  11.                     $tombszam = count($szoveg_tomb);  
  12.                     print $tombszam[$i];  
  13.                 }  
  14.   
  15.   
  16.         fclose($fa);  
  17.   
  18.     }  
  19. ?>  
de ezt a hibát kapom:
Parse error: parse error, unexpected T_FOR a 10. sorban
mit rontok el?
előre is köszönök mindent!
 
1

Hianyzo karakter

Grandmaster · 2006. Szep. 14. (Cs), 21.25
Hianyzik a
  1. $szoveg_tomb = explode("\t"$sor)  
utan a pontos vesszo.
2

előtte nincs ;

pp · 2006. Szep. 14. (Cs), 21.31
Parse error-nál érdemes megnézni az előtte levő sorokat, hogy van-e a végükön pontosvessző.
  1. <?php $szoveg_tomb = explode("\t"$sor) ;?>  
A program egyébként hibás, mert a for ciklus belsejében a $tombszam egy skalár változó (int), hisz a count függvény egy egész számot ad vissza. A rá következő sorban meg úgy kezeled, mint egy tömb. Ott te szerintem ezt akartad írni:
  1. <?php print $szoveg_tomb[$i] ?>  
pp
3

igen

Anonymous · 2006. Szep. 14. (Cs), 22.54
igen igen erre rájöttem... miután a pontos veszőt kijavítotam, nem írt ki semmit és nem tudtam miért :) de köszi a segítséget de még mindig nem jo az az igazság...
tehát most így néz ki a progi:
  1. <?php  
  2.     $file = "asd.txt";  
  3.   
  4.     if ( file_exists($file) ) {  
  5.         $fa = fopen($file'r');  
  6.         $sor = fgets($fa, 1024);  
  7.   
  8.             $szoveg_tomb = explode("\t"$sor);  
  9.   
  10.                 for ( $i=0; $i < count($szoveg_tomb); $i++) {  
  11.                     $tombszam = $szoveg_tomb;  
  12.                     print $tombszam[$i];  
  13.                 }  
  14.   
  15.   
  16.         fclose($fa);  
  17.   
  18.     }  
  19. ?>  
Deviszont ami a hiba, hogy nem jól olvassa ki a fájl tartalmát...
a fájl tartalma pl.:
Kiss\tJenö
Nagy\tBéla
Kovács\tSándor
a script ebből viszont csak a legelsőt olvassa ki... tehát a böngészőben a kimenet: KissJenö
mikor nekem az kéne hogy kiírja az öszeset egymás alát ugy ahogy a txt-ben van.
( jól tudom hogy így akkor minden egyes szót eltudok érni tömb elemként? )
meg amire még rájöttem hogy ha ékezet van benne akkor ilyen kockákat tesz a helyére és nem fut végig
Előre is köszi!
4

Egy ciklus segít a problémádon

KJoci · 2006. Szep. 14. (Cs), 23.00
  1. <?php  
  2.     $file = "asd.txt";  
  3.   
  4.     if ( file_exists($file) ) {  
  5.         $fa = fopen($file'r');  
  6.     
  7.         while ($sor = fgets($fa, 1024)) {  
  8.   
  9.             $szoveg_tomb = explode("\t"$sor);  
  10.   
  11.                 for ( $i=0; $i < count($szoveg_tomb); $i++) {  
  12.                     $tombszam = $szoveg_tomb;  
  13.                     print $tombszam[$i];  
  14.                 }  
  15.   
  16.         }  
  17.         fclose($fa);  
  18.   
  19.     }  
  20. ?>  
Az ékezet helyetti kockák azok az eltérő kódolás miatt lehet (talán UTF8?), azt hiszem akkor volt nekem is ilyen, ebbe az esetbe iconv-vel tudod átkódolni az általad használt kódlapra és akkor mennie kell.
5

húú

Anonymous · 2006. Szep. 14. (Cs), 23.23
igen, ez jo is ( majdnem : ) mármint teljesen jo, csak még lenne egy kérdésem,
hogy lehet-e ugy hogy pl két tömb elemenként ujsorban jelenítse meg :))
probálgattam most de nemjötem rá :(
a másik:
az asd.txt tartalma:

Asrock P4I65G, Intel 865G, integrált vga, fsb800, DDR 12 696 Ft
Gigabyte GA-8VM800M, VIA P4M800, integrált VGA, AGP 14 214 Ft
Asus K8V-X SE s754, VIA K8T800, FSB800 DDR400 SATA AGP 13 786 Ft
Asus P5AD2-E, Intel925XE+ICH6, Dual-Core CPU, DDR2, PCI 27 048 Ft
Asus P5GDC PRO, s775 I915P 800FSB DUAL DDR/DDR2 PCI-X 25 254 Ft
Asus P5GPL-X SE Intel 915PL+ICH6, D-DDR, 6CH, PCI-X 19 182 Ft
Asus P5GV-MX, I915GV FSB800, integrált VGA, D-DDR,PCI-X 23 446 Ft

és a böngészőben meg így jeleníti meg:
http://www.p-pressz.hu/csv/proba.php

nagyon köszönöm a sok segítséget :)
6

Nyomás alatt gyakorol az ember ;)

pp · 2006. Szep. 15. (P), 07.36
Máris munkát vállaltál, vagy saját részre lesz? Ugye nem webáruházat írsz ;))

A probléma az, hogy nem gondolsz arra, hogy html kimenetet generálsz. Ekkor az új sorba kerülést csak a <br> tag beszúrásával tudsz elérni. (vagy még sokszáz más módon pl táblázat, div-ek, stb.) és nem árt a htmlspecialchars() függévnyt ráengedni a kiírt adatokra.

Ha ennyire kezdő az ember én javasolnám azt, hogy először a google-ba ( http://google.com ) keressen. pl a csv2html php kulcsszavakra a következőt találtam:

http://www.etomite.org/forums/index.php?showtopic=2103

Kész megoldást ne is várj. Ajánlom még a php manualt, és annak is a csv fájlokkal foglalkozó fejezetét (jééé van ilyen is? ;))

http://hu.php.net/manual/en/function.fgetcsv.php

Az fgets helyett használj tehát fgetcsv-t mert így megspórolsz egy explode-ot, valamint használhatsz a for helyett foreach függvényt. Arról se feledkezz meg, hogy bele kell tenned a <br>-ek kiíratását:
  1. <?php  
  2.     $file = "asd.txt";  
  3.   
  4.     if ( file_exists($file) ) {  
  5.         $fa = fopen($file'r');  
  6.     
  7.         while ($sor = fgetcsv($fa,1024,"\t")) {  
  8.           foreach($sor as $elem){  
  9.             print $elem;  
  10.             print '<br>';  
  11.           }  
  12.         }  
  13.         fclose($fa);  
  14.     }  
  15. ?>  
vagy táblázatos kiíratás:
  1. <?php  
  2.     $file = "asd.txt";  
  3.   
  4.     if ( file_exists($file) ) {  
  5.         print '<table>';  
  6.         $fa = fopen($file'r');  
  7.     
  8.         while ($sor = fgetcsv($fa,1024,"\t")) {  
  9.           print '<tr>';  
  10.           foreach($sor as $elem){  
  11.             print '<td>';  
  12.             print $elem;  
  13.             print '</td>';  
  14.           }  
  15.           print '</tr>';  
  16.         }  
  17.         fclose($fa);  
  18.         print '</table>';  
  19.     }  
  20. ?>  
pp
http://palocz.hu
7

második

Anonymous · 2006. Szep. 15. (P), 23.28
a másodikra gondoltam ien formában huu köszike szépen :) az az igazság hogy még tanulgatom a php-t.. és így nem minden megy :)
amugy nem webáruház lessz, hanem egyik ismim boltjának árlistát listzáná ki, hogy ne keljen neki mindig html-be szarakodni...( szivesség )
hát köszönöm szépen :)