Avatar billede sorenriis Nybegynder
28. oktober 2004 - 22:24 Der er 23 kommentarer og
1 løsning

TXT-Fil til MySql-database?

Jeg har en masse txt-filer, som jeg gerne vil have lagt ind i min mysql-database.
Det kunne se sådan ud:

1    Nicolai Lind    33    32    27    1.07:437
1    Nicolai Lind    33    32    28    1.07:120
1    Nicolai Lind    33    32    29    1.07:353
1    Nicolai Lind    33    32    30    1.07:288
1    Nicolai Lind    33    32    31    1.07:254
1    Nicolai Lind    33    32    32    1.07:989
1    Nicolai Lind    33    32    33    -   
2    Karsten Pasgaard    1    1    1   
3    Kim Wennerwald    35    35    2    1.09:680
3    Kim Wennerwald    35    35    3    1.08:029

Det er en masse kolonner som er tabulator-delt.

Er der nogle der kan lave et script (eller give mig hjælp til hvordan jeg gør), som kan smide alle disse data ind i en mysql-database vha. php?
Logfilerne er meget længere end den viste (op mod 400 rækker).

På forhånd tak,
Søren Riis
Avatar billede detox Nybegynder
28. oktober 2004 - 22:27 #1
Det letteste er at bruge LOAD DATA INFILE:
http://dev.mysql.com/doc/mysql/en/LOAD_DATA.html
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 22:29 #2
Kan du forklare mig hvilken kommando jeg skal bruge?

Den readme virker lidt som volapyk for mig:D
Avatar billede detox Nybegynder
28. oktober 2004 - 22:33 #3
Du skal lave en tabel der passer til dataene. Altså med det rette antal kolonner og felttyper. Så bruger du (hvis din fil hedder: 'data.txt'):

mysql_query("LOAD DATA INFILE 'data.txt' INTO TABLE database.tabel");
Avatar billede detox Nybegynder
28. oktober 2004 - 22:34 #4
Det forudsætter at filen ligger i MySQL's 'data' mappe, ellers må du angive stien.
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 22:34 #5
hvor skal txt-filen så ligge?
Altså - den skal vel ligge et sted på mit webhotel hvis det skal fungere..:)

Er det bare i "roden" af webbiblioteket?
Avatar billede detox Nybegynder
28. oktober 2004 - 22:34 #6
Er det din egen MySQL server?
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 22:36 #7
heh.. du svarede lige lidt hurtigere end jeg stillede spørgsmålet..
Kan jeg bare skrive mysql_query("LOAD DATA INFILE 'http://www.blabld.dk/data.txt' INTO TABLE database.tabel");?

Nej - det er ikke min egen MySQL server...
Avatar billede detox Nybegynder
28. oktober 2004 - 22:43 #8
Nej, jeg tror ikke du kan angive et link. Det har jeg ikke erfaring med. Jeg vil mene du så må uploade filen til dit webhotel og bruge LOCAL syntaxen:

mysql_query("LOAD DATA LOCAL INFILE '/komplet/sti/til/filen/data.txt' INTO TABLE database.tabel");

Har du en MySQL server på din egen maskine, kan du selvfølgelig loade den der og eksportere den derfra.
Avatar billede detox Nybegynder
28. oktober 2004 - 22:45 #9
Det kan selvfølgelig laves i php istedet, hvis du ikke kan få det til at virke. Så vil jeg anbefale at du ser på fgetcsv():

http://dk2.php.net/manual/en/function.fgetcsv.php
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 22:46 #10
hvordan finder jeg den "komplette" sti på filen?
Avatar billede detox Nybegynder
28. oktober 2004 - 22:55 #11
Hvis du kører dette script fra mappen hvor filerne ligger skulle du gerne få den:

<?php
echo $_SERVER["PATH_TRANSLATED"];
?>
Avatar billede detox Nybegynder
28. oktober 2004 - 23:06 #12
Her et eksempel på hvordan du kan lave det i php:

<?php
require 'db.php'; // Forbindelse til databasen
$handle = fopen("data.txt", "r");
while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
  $data = array_pad($data,6,'');
  $input = "'" . implode("','", $data) . "'";
  $sql = "INSERT INTO tabel (felt1,felt2,felt3,felt4,felt5,felt6,) VALUES ($input)";
  mysql_query($sql);
}
fclose($handle);
?>
Avatar billede detox Nybegynder
28. oktober 2004 - 23:08 #13
Måske der lige skal tilføjes:

echo "Data er indlæst";

til sidst, så man kan se når den er færdig ;O)
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 23:20 #14
Jeg har oprettet 10 felter i mysqldatabasen af typen "text".
Først prøvede jeg med min egen kode. Den blev afviklet fint, men der kom intet ind i den.

Så prøvede jeg med din - i lettere modifiseret form.
Så således ud:

<?
require 'database.php'; // Forbindelse til databasen
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
  $data = array_pad($data,10,'');
  $input = "'" . implode("','", $data) . "'";
  $sql = "INSERT INTO analyser (1,2,3,4,5,6,7,8,9,10) VALUES ($input)";
  mysql_query($sql);
}
fclose($handle);
echo "Data er indlæst";
?>

Jeg har fået lavet en csv-fil hvor alle kolonnerne er delt med et ";". Desuden er der 10 kolonner - ikke 6 som i eksemplet. Så jeg regner med mine rettelser er gode nok?
Avatar billede detox Nybegynder
28. oktober 2004 - 23:23 #15
Hvis dine felter i databasen hedder: '1', '2', '3', osv... ser det rigtigt ud.
Avatar billede detox Nybegynder
28. oktober 2004 - 23:23 #16
Fungerer det ikke?
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 23:24 #17
Nej.. der ryger intet ind i databasen....
Avatar billede detox Nybegynder
28. oktober 2004 - 23:28 #18
Prøv at rette:

mysql_query($sql);

til:

mysql_query($sql) or die(mysql_error());
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 23:30 #19
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''1','2','3','4','5','6','7','8','9','10') VALUES ('1','Nicolai
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 23:31 #20
Versionen af MySQL er 4.0.21....
Avatar billede detox Nybegynder
28. oktober 2004 - 23:34 #21
Prøv at bruge rigtige feltnavne istedet for tal.
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 23:36 #22
And the champagne...........:-D
Avatar billede sorenriis Nybegynder
28. oktober 2004 - 23:36 #23
Afgiv lige et svar.. så skal du få dine velfortjente points!
Avatar billede detox Nybegynder
28. oktober 2004 - 23:39 #24
Ok, så :O)
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