Just nu i M3-nätverket
Jump to content

PHP-----txt filer


BorO

Recommended Posts

Hallå!

 

Jag har e problem här som jag ve tinte om jag kan lösa... har en fil.txt som ser ut som en tabell med många rader och två columner.....

Vill köra igenom txt filen o stoppa rad för rad i var sin plats i en tabell i en databas......

Går det?

Link to comment
Share on other sites

Självklart går det att fixa. Om det är en CSV eller TSV (Comma Separated Values resp. Tab ...) så är det jättelätt att läsa in den direkt antingen med MySQL eller PHP.

 

Klistra in två, tre rader från den här ska ska jag hjälpa dig.

 

Link to comment
Share on other sites

Klistra in några rader från txt-filen, så jag får se på ett ungefär hur upplägget i filen är.

Om det är känslig data kan du ju ersätta den med skräptecken bara.

 

Har den tabellhuvuden i sig osv?

 

Link to comment
Share on other sites

Har börjat läsa på ämnet nu :)

 

fil.txt

 

1 Audi

2 Bmw

3 Mercedes

 

Det är inte så det ser ut, men det är två ord per rad...

 

Kan ni fixa en exempel?

 

 

Link to comment
Share on other sites

Efter att ha tittat på sourcen på sidan så misstänker jag att filen är tab separerad. Då kan du bara följa exemplet som finns på den sidan jag skrev innan, fast ändra en rad (den med fetstil) så att det står \t istället:

 

<?php
$row = 1;
$fp = fopen ("csv.txt","r");
[b]while ($data = fgetcsv ($fp, 1000, "\t")) {[/b]
   $num = count ($data);
   print "<p> $num fields in line $row: <br>\n";
   $row++;
   for ($c=0; $c < $num; $c++) {
       print $data[$c] . "<br>\n";
   }
}
fclose ($fp);
?>

 

Detta borde få dig i startgroparna på det du gör. Om det nu inte är så att filen är tab separerad utan separeras med ett mellanslag så är det bara att du lägger in ett mellanslag där istället, ett problem du kan få då är dock om en bil heter någonting som innehåller ett mellanslag.

 

En annan sak som kanske bör sägas är att en sån här sak kan du använda en databas till, om du har tillgång till någon databas så kanske du ska använda det istället.

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Link to comment
Share on other sites

Ok. Vi antar följande:

1. Kolumn 1 är en id-siffra

2. Kolumn två är ett strängvärde

3. Filen innehåller ej mer än två kolumner, vilket alltså innebär att kolumn två kan innehålla mellanrum.

 

Så här kan du göra då:

$fp = fopen("fil.txt", "r");
while (!feof($fp)) {
$data = fgets($fp);
$kol = @preg_split("/^([^[:space:]]+)[[:space:]]+(.*)/", $data);
if ($kol) mysql_query("INSERT INTO tabell (kol1, kol2) VALUES('" . addcslashes($kol[1]) . "', '" . addcslashes($kol[2]) . "')");
}

 

Link to comment
Share on other sites

Hrrmm, sorry, jag läste nog inte igenom ditt första meddelande riktigt... du ville ju läsa in det som fanns i filen i en databas...

 

Det du då kan göra istället för att skriva ut datat är att förbereda SQL anrop, alternativt göra en insert för varje gång while loopen går runt.

 

Hur du sysslar med databaser kan du läsa om på många ställen i manualen, eftersom jag inte vet vilken sorts databas du vill stoppa in värdena i så kan jag inte guida dig till någon specifik sida, men eftersom mySQL väl är den vanligaste kombinationen med PHP så har du länken till den delen av manualen här: http://www.php.net/manual/en/ref.mysql.php

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Link to comment
Share on other sites

Tack för hjälpen!

 

En sak till bara Cariad... Om jag istället för en mellanrom ska ha bara en komma tecken?

Hur skulle det se ut då?

 

Link to comment
Share on other sites

Då behöver du egentligen bara ändra rad 4, men nedan har jag även ändrat lite i INSERT-frågan, för att man inte ska få med extra tomrum.

 

Jag missade även ett argument till addcslashes, som jag nu lagt till (du får ändra hela rad 5 i ovanstående kod också).

 

Därför skriver jag hela koden igen:

$fp = fopen("fil.txt", "r");
while (!feof($fp)) {
$data = fgets($fp);
$kol = @preg_split("/^([^[:space:]]+)[[:space:]]+(.*)/", $data);
if ($kol) mysql_query("INSERT INTO tabell (kol1, kol2) VALUES('" . addcslashes(trim($kol[1]), "'") . "', '" . addcslashes(trim($kol[2]), "'") . "')");
}

 

[inlägget ändrat 2002-12-03 21:54:52 av Cariad]

Link to comment
Share on other sites

Oj, förlåt, jag glömde visst att fixa det som var meningen att jag skulle fixa ;)

Stressad, tittade på 24 samtidigt (TV4).

 

Så här ska rad 4 se ut:

$kol = @preg_split("/^([^,]+),(.*)/", $data);

 

Link to comment
Share on other sites

Undra om den nye mördaren är lika tuff som Gaines...

Antagligen inte... Han såg ut att vara tagen direkt ur en High School-film.

 

Sen ska han säkert bryta så där larvigt på centraleuropeiska som bara amerikanare kan.

 

Nåväl, tidsfördriv som tidsfördriv. Keifer är någorlunda duktig i alla fall.

 

Link to comment
Share on other sites

Nåväl, tidsfördriv som tidsfördriv. Keifer är någorlunda duktig i alla fall.

 

Jodå, det tar sig ordentligt (spänningsmässigt) mot slutet. Personligen anser jag att det var en rejäl svacka ungefär mellan avsnitt 7 och 13, men det tar sig som sagt.

 

En grej som var coolt var att inte ens skådespelarna själva visste vem som var badguy (på insidan alltså) när de började spela in serien.

 

 

//jonasn, som följer säsong 2 nu.

 

 

---

If I learn from my mistakes, pretty soon I’ll know everything.

 

Link to comment
Share on other sites

Exakt, att använda php verkar ju vara som att gå över ån efter vatten (eller hur man nu säger?). Detta kan ju göras via mysqlimport, eller direkt från mysqls kommandoprompt "load data infile bla bla...".

 

Link to comment
Share on other sites

Ja, jag håller med. Om det var min data skulle jag använt MySQLs inbyggda, och det föreslog jag också (läs mitt första inlägg).

 

Men, i detta fall verkade inte Bor0 vara så där jättebevandrad i PHP, och att då blanda in MySQL också försvårar ju bara.

Jag såg det då som en bättre idé att ge honom lite tips i PHP som han kan ha användning för i framtidien också.

Samt att han startade tråden i PHP-forumet, och då anser jag att man ska diskutera PHP.

 

Link to comment
Share on other sites

Det här med MySQlImport verkar väldigt intressant........

Har läst lite på ämnet...

 

Undrar om själva txt filen måste vara utformad som tabellen i databasen eller kan man urskilja ord i filen som Cariad visade att man kunde göra....

 

Måste orden som står bredvid varandra i txt filen läggas bredvid varandra i tabellen eller kan man lägga den andra ordet i en "tredje" column?

 

Förstår ni?

 

Link to comment
Share on other sites

Om du inte anger några parametrar till mysqlimport så förutsätts det att fileen motsvarar fälten i tabellen. Annars kan du ange vilka kolumner som datan ska in i med -c kol5,kol1,kol3

 

o sen kan du välja fältseparator med --fields-terminated-by=

 

Default är

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...