04. juni 2004 - 13:46
Der er
32 kommentarer og 1 løsning
Udtræk fra fil til mysql
Hej eksperter. Jeg modtager ugenligt en lang fil med nedenstående data. Denne fil ville jeg meget gerne via et php script kunne indsætte en min mysql database. Men det er jo ikke lige til. Kan man evt bruge php til at formater det og evt kaste det ind i mysql? Jeg er villig til at afgive flere points :-) 1;10;3030634;27.02.04;30.03.04;05.04.04 2;1;3632;882;2102919805;;;08.03.04;19.11.03;101,00; 2;2;3646;210;2103088874;;;25.03.04;15.12.03;63,00;0,00 2;3;3627;1981;2103089083;;;02.03.04;06.01.04;215,00; 2;4;3626;1004;2103089124;;;01.03.04;08.01.04;86,00;0,00 2;5;3625;1106;2103089191;;;27.02.04;12.01.04;128,00;0,00 2;6;3625;1304;2103159408;;;27.02.04;19.01.04;382,00;0,00 2;7;3634;1667;2103159450;;;09.03.04;21.01.04;35,00; 2;8;3634;2147;2103159453;;;09.03.04;21.01.04;44,00;
Annonceindlæg fra Cognizant
Hvorfor er det ikke lige til?
Ja du kan bare lave et script som åbner filen, læser værdierne ind i f.eks et array også videre ned i mysql. Jeg lavede noget lignede for noget tid siden.
$fp = fopen('fil.txt','r'); if( $fp ) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $sql = "INSERT INTO tabel (c1,c2,c3) VALUES('$data[0]',$data[1],$data[2])"; ... } fclose($fp); } else print "Kan ikke åbne fil.txt"; ?
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { skal bare være: while (($data = fgetcsv($handle, 1000)) !== FALSE) {
Jamen det er lige præcis sådan noget jeg ik kan finde ud af. I håb om at få nogle eksempler har jeg også afsat 60 points. Hvordan åbner man en fil og i såfald, hvordan henter man data ud fra den? den skal jo tage alt bortset fra ; Ville blive glad for et eksempel eller 2
Nu har jeg skrevet således: <?php $link = mysql_connect ("portal", "root", "") or die ("Could not connect: " . mysql_error()); $DB = mysql_select_db("taxi") or die("Invalid query: " . mysql_error()); $fp = fopen('KTO30634.TXA','r'); if( $fp ) { while (($data = fgetcsv($handle, 1000)) !== FALSE) { $sql = "INSERT INTO regning (test1,test2,test3) VALUES('$data[0]',$data[1],$data[2])"; } fclose($fp); } else { print "Kan ikke åbne fil.txt"; } ?> Men får disse fejl :( Notice: Undefined variable: handle in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 9 Warning: fgetcsv(): supplied argument is not a valid stream resource in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 9
$fp = fopen('KTO30634.TXA','r'); skal være $handle = fopen('KTO30634.TXA','r');
og fclose($fp); skal være fclose($handle);
04. juni 2004 - 14:12
#10
ok nu er det tilrettet. Så kommer denne fejl: Notice: Undefined index: 1 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 12 det er sql sætningen
04. juni 2004 - 14:16
#11
prøv i whilen at tilføje: print_r($data);print "<br>"; og skriv outputtet her
04. juni 2004 - 14:19
#12
ok. den skriver nedenstående: Array ( [0] => 1;10;3030634;27.02.04;30.03.04;05.04.04 ) Array ( [0] => 2;1;3632;882;2102919805;;;08.03.04;19.11.03;101 [1] => 00; ) Array ( [0] => 2;2;3646;210;2103088874;;;25.03.04;15.12.03;63 [1] => 00;0 [2] => 00 ) Array ( [0] => 2;3;3627;1981;2103089083;;;02.03.04;06.01.04;215 [1] => 00; ) Array ( [0] => 2;4;3626;1004;2103089124;;;01.03.04;08.01.04;86 [1] => 00;0 [2] => 00 ) Array ( [0] => 2;5;3625;1106;2103089191;;;27.02.04;12.01.04;128 [1] => 00;0 [2] => 00 ) Array ( [0] => 2;6;3625;1304;2103159408;;;27.02.04;19.01.04;382 [1] => 00;0 [2] => 00 ) osv..... Det ser rigtigt godt ud. Det store spørgsmål er så hvordan jeg sortere det? I databasen er der jo et felt for hvert semicolorn (;). how??? Super du gider lave de her eksempler!
04. juni 2004 - 14:22
#13
du kunne jo prøve min løsning :-)
04. juni 2004 - 14:26
#14
prøv: while (($data = fgetcsv($handle, 1000, ';')) !== FALSE) {
04. juni 2004 - 14:26
#15
det har jeg også prøvet riversen og det ser også godt ud, når man laver en printr, da den fjerne alle ; . Men jeg aner ik hvor man kommer videre herfra.
04. juni 2004 - 14:30
#16
du laver bare din sql som du var i gang med ovenfor
04. juni 2004 - 14:30
#17
ja nu ser det bedre ud dennismp ;) Jeg har netop, fået alt ind i databasen. 2 sek. tester lige lidt mere ;-)
04. juni 2004 - 14:34
#18
Jeg troede at fgetcsv defaultede til ';' - men jeg to vist fejl :)
04. juni 2004 - 15:03
#19
yes. det virker kanon ;-) hit med et svar. Tusind tak til jer begge
04. juni 2004 - 15:28
#20
Hvad betyder de 1000? while (($data = fgetcsv($handle, 1000, ';')) !== FALSE) {
04. juni 2004 - 18:16
#21
fgets læser 1000 antal tegn eller til det nærmeste linjeskift. Typisk finder den linjeskiftet før den når de 1000 tegn
05. juni 2004 - 09:25
#22
okay :) du svarer bare mester, så du kan få dine points
05. juni 2004 - 10:35
#23
En ting jeg dog syntes er lidt mærkeligt, er at alt virker som det skal nu. Min kode ser således ud, og jeg får nedenstående fejl. Men alt bliver smidt i databasen og virker fint. Hvad kan det være? <?php $link = mysql_connect ("portal", "root", "") or die ("Could not connect: " . mysql_error()); $DB = mysql_select_db("taxi") or die("Invalid query: " . mysql_error()); $handle = fopen('KTO30634.TXA','r'); if( $handle ) { while (($data = fgetcsv($handle, 1000, ';')) !== FALSE) { $sql = "INSERT INTO regning (test1, test2, test3, test4, kuponnr, bebiterings_dato, korsels_dato, belob, tillag) VALUES ('$data[0]', $data[1], $data[2], $data[3], $data[4], '$data[7]', '$data[8]', '$data[9]', '$data[10]')"; $DB = mysql_query($sql); // print_r($data[1]);print "<br>"; } fclose($handle); } else { print "Kan ikke åbne fil.txt"; } ?> Fejl: Notice: Undefined index: 7 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 8 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 9 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 10 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 7 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 8 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 9 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13 Notice: Undefined index: 10 in C:\winnt\profiles\dmg\Desktop\webs\taxi\fil_insert.php on line 13
05. juni 2004 - 13:58
#24
Hmm prøv at tilføje dette i din while-løkke if( count($data) != 11 ) { print "Der er for mange/få elementer:<br>"; print_r($data[1]);print "<br>"; } Prøv at smide det nye output her..
05. juni 2004 - 15:20
#25
okay, jeg har tilføjet den lige over else: Notice: Undefined index: 7 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 8 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 9 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 10 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 7 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 8 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 9 in c:\inetpub\wwwroot\fil_insert.php on line 19 Notice: Undefined index: 10 in c:\inetpub\wwwroot\fil_insert.php on line 19 Der er for mange/få elementer:
05. juni 2004 - 15:23
#26
upss du sagde i while-løkken!!! ja selvfølgelig :) her er outputtet: Der er for mange/få elementer: 10 Notice: Undefined index: 7 in c:\inetpub\wwwroot\fil_insert.php on line 26 Notice: Undefined index: 8 in c:\inetpub\wwwroot\fil_insert.php on line 26 Notice: Undefined index: 9 in c:\inetpub\wwwroot\fil_insert.php on line 26 Notice: Undefined index: 10 in c:\inetpub\wwwroot\fil_insert.php on line 26 Der er for mange/få elementer: 751 Notice: Undefined index: 7 in c:\inetpub\wwwroot\fil_insert.php on line 26 Notice: Undefined index: 8 in c:\inetpub\wwwroot\fil_insert.php on line 26 Notice: Undefined index: 9 in c:\inetpub\wwwroot\fil_insert.php on line 26 Notice: Undefined index: 10 in c:\inetpub\wwwroot\fil_insert.php on line 26
05. juni 2004 - 15:30
#27
det ser ud til at du har nogle linjer der er "underlige". <?php $link = mysql_connect ("portal", "root", "") or die ("Could not connect: " . mysql_error()); $DB = mysql_select_db("taxi") or die("Invalid query: " . mysql_error()); $handle = fopen('KTO30634.TXA','r'); if( $handle ) { $line = 0; while (($data = fgetcsv($handle, 1000, ';')) !== FALSE) { $line++; $sql = "INSERT INTO regning (test1, test2, test3, test4, kuponnr, bebiterings_dato, korsels_dato, belob, tillag) VALUES ('$data[0]', $data[1], $data[2], $data[3], $data[4], '$data[7]', '$data[8]', '$data[9]', '$data[10]')"; $DB = mysql_query($sql); if( count($data) != 11 ) { print "Der er for mange/få elementer i linje $line:<br>"; print_r($data);print "<br>"; } } fclose($handle); } else { print "Kan ikke åbne fil.txt"; } ?> Så skulle den gerne skrive hvilket linje nummer i filen det drejer sig om.. Prøv at se nærmere på de linjer den brokker sig over.
05. juni 2004 - 15:47
#28
arhaaaa... det er fordi den første og sidste linje i dokumentet er forskelligt fra de andre. kan man gøre noget ved dette. Simpelthen fortælle den, at den ikke skal tage dem med? det ville være for sejt ;-)
05. juni 2004 - 15:52
#29
joda - der skal ikke så meget til :) <?php $link = mysql_connect ("portal", "root", "") or die ("Could not connect: " . mysql_error()); $DB = mysql_select_db("taxi") or die("Invalid query: " . mysql_error()); $handle = fopen('KTO30634.TXA','r'); if( $handle ) { $line = 0; while (($data = fgetcsv($handle, 1000, ';')) !== FALSE) { $line++; if( count($data) != 11 ) { print "Der er for mange/få elementer i linje $line:<br>"; print_r($data);print "<br>"; } else { $sql = "INSERT INTO regning (test1, test2, test3, test4, kuponnr, bebiterings_dato, korsels_dato, belob, tillag) VALUES ('$data[0]', $data[1], $data[2], $data[3], $data[4], '$data[7]', '$data[8]', '$data[9]', '$data[10]')"; $DB = mysql_query($sql); } } fclose($handle); } else { print "Kan ikke åbne fil.txt"; } ?>
05. juni 2004 - 15:59
#30
okay |: hvad er forskellen? Jeg kan slet ikke finde rettelsen?
05. juni 2004 - 16:06
#31
Det er eller ikke meget. Jeg har blot flyttet sql-insert koden ind i en else af if(count($data) != 11 ). Så den enten "brokker sig" eller indsætter i databasen.
05. juni 2004 - 16:19
#32
jamen du skal ha dine points. du svarer bare ;-) tusind tak for hjælpen!!!
05. juni 2004 - 16:23
#33
Det var så lidt :)
Vi tilbyder markedets bedste kurser inden for webudvikling