Avatar billede lbpe Nybegynder
04. august 2003 - 21:28 Der er 20 kommentarer og
1 løsning

String parsing

Hejsa!

Jeg skal have splittet en komma sepereret fil op, så jeg får dem som variable jeg kan indsætte i en db.
Input-strengen har følgende format: "1","test","test2","test3" osv.
Jeg har set på lidt forskellige funktioner, men da det skal gøres forholdvis mange gange efter hinanden, så ønsker jeg den "bedste" funktion (dvs. den der belaster systemet mindst, men samtidig er forholdsvis hurtig).
Jeg hører derfor meget gerne fra folk, som ved hvilken funktion jeg skal vælge til netop denne opgave - samt evt. lidt eksempel kode :)
Takker på forhånd!
Avatar billede lbpe Nybegynder
04. august 2003 - 21:29 #1
PS. Jeg har set en del på fscanf(), men kan den finde ud af at splitte ved ","?
Avatar billede hoejrup Nybegynder
04. august 2003 - 21:30 #2
Avatar billede tipsen Nybegynder
04. august 2003 - 21:45 #3
Kan du ikke bare bruge noget i retning af:

INSERT INTO tabelnavn VALUES("1", "test", "test2", "test3");

Så slipper du for at splitte dataene op...
Avatar billede tipsen Nybegynder
04. august 2003 - 21:47 #4
Du behøver endda ikke noget som helst php-magi, da der i forvejen findes en funktion i MySQL lige til formålet: http://www.mysql.com/doc/en/LOAD_DATA.html
Avatar billede detox Nybegynder
04. august 2003 - 22:17 #5
Prøv fx:

LOAD DATA INFILE "my.txt" INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '"';
Avatar billede lbpe Nybegynder
04. august 2003 - 22:53 #6
Hvordan er det nu jeg gør det i PHP - noget a'la

mysql_query("LOAD DATA INFILE \"users.txt\" INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '\"'");

?
Avatar billede detox Nybegynder
04. august 2003 - 23:07 #7
Ja, det skulle jeg mene.
Avatar billede tipsen Nybegynder
04. august 2003 - 23:09 #8
Jeg ved faktisk ikke, hvordan stien til .csv filen skal angives - om det skal være fuld sti, relativt til script, relativt til mysql eller...
Avatar billede lbpe Nybegynder
04. august 2003 - 23:11 #9
Det virker ikke rigtig - der bliver ikke indsat noget i tabellen. Har også prøvet at slette det sidste semikolon - men det hjælper heller ikke
Avatar billede detox Nybegynder
04. august 2003 - 23:13 #10
Det virker, hvis stien er relativ til scriptet, Men en absolut sti kan vel osse gøre det.
Avatar billede tipsen Nybegynder
04. august 2003 - 23:13 #11
slut altid en mysql_query() af med or die(mysql_error()), så du får en fejlmelding.
Avatar billede detox Nybegynder
04. august 2003 - 23:20 #12
Sorry, my bad. Filen skal ligge i mappen, hvor data'ene til databasen opbevares.
Avatar billede lbpe Nybegynder
04. august 2003 - 23:22 #13
Hmm, det er pt. på en anden server :(
Jeg får følgende fejl (sikkert som resultat af at db data og filen ikke ligger det samme sted):
Access denied for user: '...' (Using password: YES)
Avatar billede detox Nybegynder
04. august 2003 - 23:28 #14
Måske kan du bruge LOCAL. Jeg har dog ikke haft held med det i min MySQL ver.

mysql_query("LOAD DATA LOCAL INFILE \"users.txt\" INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '\"'") or die(mysql_error());
Avatar billede lbpe Nybegynder
04. august 2003 - 23:30 #15
Og min MySQL er for gammel til LOCAL :(
Avatar billede lbpe Nybegynder
04. august 2003 - 23:32 #16
Jeg tager fat i min web-udbyder og håber på han har en nyere db-server
Avatar billede detox Nybegynder
04. august 2003 - 23:32 #17
Ja, det får jeg osse at vide selvom manualen siger:
"LOCAL is available in MySQL Version 3.22.6 or later"
og min ver. er 4.0.12 :-(
Avatar billede lbpe Nybegynder
04. august 2003 - 23:35 #18
Herligt! Jeg synes dog klart du har fortjent pointene, da det formodentlig virker som det skal! Vil du oprette et "svar" :) Takker for hjælpen
Avatar billede detox Nybegynder
04. august 2003 - 23:41 #19
Hmm, jeg så lige dette på nettet:
http://mysql-mirror.free.fr/doc/L/O/LOAD_DATA_LOCAL.html
Der er åbenbart et sikkerhedsproblem der, så man skal konfigurere MySQL til at godtage LOCAL.
Avatar billede tipsen Nybegynder
05. august 2003 - 00:58 #20
lbpe: Det er helt klart den pæne løsning med LOAD DATA INFILE, men du skal også være opmærksom på at der er mange antagelser som skal være opfyldt inden funktionen fungerer - læs de links der er givet ovenfor og så vil du bl.a. også se, at brugeren skal have FILE rettighed i MySQL for at benytte kommandoen! (Also, to use LOAD DATA INFILE on server files, you must have the FILE privilege on the server host. See section 4.2.7 Privileges Provided by MySQL.)
Avatar billede lbpe Nybegynder
30. august 2003 - 18:12 #21
Blev nødt til at løse problemet med PHP-kode. Dette kører imidlertid også ganske fint, så jeg er sådan set tilfreds. Takker for de mange indlæg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester