Avatar billede zoom83 Nybegynder
20. august 2009 - 10:59 Der er 9 kommentarer og
1 løsning

Importer data fra en txt fil

Hej Exp.

Jeg har fået en txt fil fra min kollega som jeg skal have  importer i min mysql database på min hjemmeside men nu er problemmet så hvordan gør jeg best det i php.

Data filen indholder 3 felter fornavn mellemnavn efternavn

De 3 navne er adskilt med TAB fx. sådan her

Allan TAB Christian TAB Hansen
Annette TAB Sofie TAB Mortensen

OSV. OSV.

(Husk der står ikke TAB i filen har bare skrivet TAB da jeg ikke tror at tasten TAB virker her inde på exp.dk

Men hvordan laver jeg best en php kode som kan håndtere dette ?

Måske noget i den her sitl.

<?php

$fil = fopen("navne.txt","r");
$indhold = fread($fil,filesize("navne.txt"));
fclose($fil);

$indhold = ereg_replace("TAB", "indsæt felte i mysql database", $indhold);

Dog tror jeg ikke på det er denne måde man skal gøre det på ;-)

På forhånd tak ;-)
Avatar billede foo85 Novice
20. august 2009 - 12:49 #1
Du har fat i noget af det rigtige...

Åben filen med fopen - som du gør
åben din database
Lav en while løkke som fikser dine data

while(!feof($fil)){ //kør så længe der er data i filen.
  $line = fgets($fil);
  $navne = split('\t',$line);
  $mysql_str = "INSERT INTO `tabelnavn`('kolonne1','kolonne2','kolonne3') VALUES ('$navne[0]','$navne[1]','$navne[2]')";
  mysql_query($mysql_str);
}

Det skal siges at der ikke er nogen fejlsikring her, og scriptet tager blot de tre navne og laver om til et array (for hver TAB) og sætter de værdier ind i seperate kolonner.

Hvis du skal have det i en kolonne, bliver SQL lidt anderledes...
Avatar billede zoom83 Nybegynder
20. august 2009 - 13:29 #2
Prøvet at lave den sådan her uden mysql først bare for at få det første på plads for det er intet problem at ligge det ind i mysql databasen bagefter ;-)

Når jeg prøver denne kode får jeg bare hvid skærm kan du se hvad jeg har gjort galt.

Og 1000 tak for din hjælp ;-)

<?php
include("../sql.php");

$fil = fopen("navneliste.txt","r");

while(!feof($fil)){ //kør så længe der er data i filen.
  $line = fgets($fil);
  $navne = split('\t',$line);

Print"$navne[0] <br>";
}

?>
Avatar billede zoom83 Nybegynder
20. august 2009 - 13:41 #3
Okay rettet $navne[3] til $navne[0] så viser den

bo chris
abe 1 2
3 4 5


Og i den prøve fil jeg har lavet har jeg skrivet

bo    christian    hansen
abe    1    2
3    4    5


Men den skulle jo kun vise

bo
abe
3

da de jo står som nr. 0

håber du forstår mig ;-)
Avatar billede zoom83 Nybegynder
20. august 2009 - 13:47 #4
og retter jeg den til $navne[1] skriver den "ian hansen" jeg er slet ikke med hvordan den får det til det for jeg vil jo mende at $navne[1] skulle udskrive

christian
1
4

Det er tydeligvis et eller andet der snyder mig men nu skal jeg nok lade være med at spamme hele tråden ned ;-)
Avatar billede foo85 Novice
20. august 2009 - 13:53 #5
Jeg er helt enig, og kører jeg scriptet på min egen, så virker det også...

Jeg får kun kolonne data ud når jeg bruger echo eller Print - det er underligt... Kan slet ikke se noget galt i din kode...
Avatar billede foo85 Novice
20. august 2009 - 14:00 #6
Jeg har en mistanke, som er hurtig at teste...

Jeg tror din tekstfil ikke benytter almindelige tabs (\t) til at tabulere... Men har fundet en stump kode som du kan prøve og indsætte efter $line = fgets($fil);

$line = preg_replace('/\s+/', '\t', $line);

Den skulle gerne tage alle mellemrum og lave dem om til tab...
Avatar billede zoom83 Nybegynder
20. august 2009 - 14:38 #7
Hvis jeg indsætter denne kode skriver den

chris
1\
4\

Hvis der bliver kaldt efter $navne[1]

syns det er sjovt at den ikke skrive hele navnet "christian" den stopper lige ved bogstavet T

Her et et link tuk den navne fil jeg tester med og den skulle gærne kun indholde navne og så TAB

Link http://edblee.com/navneliste.txt
Avatar billede zoom83 Nybegynder
20. august 2009 - 14:41 #8
Hej

Jeg har fået det til at virke 1000 tak for hjælpen ;-)

Skriv et svar så du kan få nogen point ;-)
Avatar billede foo85 Novice
20. august 2009 - 15:11 #9
svar :)
Hvad var problemet?
Avatar billede zoom83 Nybegynder
20. august 2009 - 15:30 #10
Jeg skrifte

$navne = split('\t',$line);

Ud med

$navne = split('    ',$line);
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