Avatar billede jakobsen Nybegynder
08. april 2005 - 00:13 Der er 17 kommentarer og
1 løsning

list kun nogle bestemte

hejsa,

jeg har en fil 123.txt der er 70.000 linier i,
og 15 felter delt med ;

jeg har dette:

$indhold = file('123.txt');
foreach($indhold as $linje1) {
list ($linie1, $linie2 osv..) = explode(';', $linje1);

jeg vil gerne kun have listet dem hvor $linie1 = hest

er det muligt?
Avatar billede bromer Nybegynder
08. april 2005 - 00:19 #1
Du kan selvfølgelig gøre det i PHP, hvor du bare smider en if-sætning ind:

$indhold = file('123.txt');
$count = count($indhold);
for($i = 0;$i < $count;$i++) {
$tmp = explode(";",$indhold[$i]);
if ($tmp[0] == 'hest') {
  // do your stuff
}
}

Hvilket operativsystem har du installeret på serveren?
Avatar billede jakobsen Nybegynder
08. april 2005 - 00:27 #2
glemte at:

"hest" er data fra en select, og der 2000 forskellige,
dvs. den skal køre den if sætning 2000 gange, men inden den gør det, skal den åbne
de 70.000 linier i $tmp ... kan man gøre det lidt snartere ?
Avatar billede bromer Nybegynder
08. april 2005 - 00:34 #3
For det første ville jeg opbygge et array af de forskellige muligheder som du kan sammenligne med.

Men hvis du har et unix system kan du måske benytte grep til at sortere i filen.
Avatar billede jakobsen Nybegynder
08. april 2005 - 00:39 #4
hmm ja, hvor finder jeg noget mere hjælp til array ?

fordi nu har jeg:
$sql = mysql_query("SELECT kat FROM test WHERE kat='$linie1'");
    if (mysql_num_rows($sql)) {

men den laver jo så en query for alle de 70.000 linier,
og det nok ikke helt optimalt?
Avatar billede bromer Nybegynder
08. april 2005 - 00:45 #5
<?php

$cats = array();
$rs = mysql_query("SELECT kat FROM test");
while($row = mysql_fetch_row($rs)) {
array_push($cats,$row[0]);
}

$indhold = file('123.txt');
$count = count($indhold);

for($i = 0;$i < $count;$i++) {
$tmp = explode(";",$indhold[$i]);
if (in_array($tmp[0],$cats)) {
  // do your stuff
}
}

Det burde gør det en smule hurtigere.
Avatar billede jakobsen Nybegynder
08. april 2005 - 09:08 #6
synes ik det virker optimalt.

hvis nu jeg smider txt filen i sql, kan jeg så ikke lave en .sql fil der tjekker bagefter?  hvis jeg gør det via phpmyadmin kører det nemt fint hurtig,
jeg ved bare ikke hvordan jeg får det ned i php, med run .sql et eller andet
Avatar billede bromer Nybegynder
08. april 2005 - 10:02 #7
Hvad mener du med at smide .txt filen i sql. Hvilken type data er det? Det er klart at hvis du kan få informationen til at ligge i MySQL databasen kan det gå meget hurtigere.
Avatar billede jakobsen Nybegynder
08. april 2005 - 10:30 #8
data'en er en beskrivelses af et produkt, der er 20 felter til hvert produkt.
Avatar billede bromer Nybegynder
08. april 2005 - 10:34 #9
okay, så ville jeg smide dem i en tabel kaldet products. Hvilken version af hvilken database kører du med?
Avatar billede jakobsen Nybegynder
08. april 2005 - 10:49 #10
ellers, hvis jeg laver et array på det 2000 id nummere,
kan jeg vel bare tjekke i array'et ? det kræver vel kun cpu?
eller det måske smartere at tjekke dataen når det er i databasen?
kører 3.53 mener jeg.
Avatar billede bromer Nybegynder
08. april 2005 - 10:52 #11
Så længe du skal læse en så stor fil igennem er det flaskehalsen i dit script. Det burde være muligt at optimere det væsentligt, hvis du opretter en tabel til dine produkter.
Avatar billede bromer Nybegynder
08. april 2005 - 10:52 #12
Må jeg spørge om, hvorfor de er i en .txt fil?
Avatar billede jakobsen Nybegynder
08. april 2005 - 10:59 #13
fordi det en txt fil vi får tilsendt med oplysninger..
Avatar billede bromer Nybegynder
08. april 2005 - 11:02 #14
Okay. Du skal nok overveje hvorvidt I får dem tilsendt så ofte at det ikke kan befale sig at smide dem i en tabel. Hvor tit tilgår I filen?
Avatar billede jakobsen Nybegynder
08. april 2005 - 11:06 #15
hver dag
Avatar billede bromer Nybegynder
08. april 2005 - 11:09 #16
I får een tilsendt hver dag eller i tilgår hver dag?
Avatar billede jakobsen Nybegynder
08. april 2005 - 15:03 #17
har fundet svar, hvis du laver et svar får du lige point
Avatar billede bromer Nybegynder
08. april 2005 - 15:11 #18
mange tak
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