Avatar billede syswatch Novice
02. december 2003 - 11:26 Der er 8 kommentarer og
1 løsning

Søge i en komma sepereret fil

Hej Eksperter.
Jeg har en komma sepereret fil, hvor strukturen ser således ud.

01.001,76
01.002,12
01.003,0
01.004,104

Nu vil jeg gerne lave en form hvor man kan indtaste fx. varenummeret, og så få PHP til at søge efter den dette varenummer og derefter vise antallet (felt2).

Jeg har helt styr på det hvis det havde været i MySQL, men har aldrig rodet med tekstfiler før.
Nogen der har en ide til noget kode ?
Avatar billede tipsen Nybegynder
02. december 2003 - 11:41 #1
Hvor stor er tekstfilen / Hvor stor vil tekstfilen blive?
Avatar billede syswatch Novice
02. december 2003 - 11:46 #2
Den er i øjeblikket 250KB og indeholder 12500 varenumre... det skulle vel ikke være noget problem....
Har du nogen ide'er ?
Avatar billede detox Nybegynder
02. december 2003 - 11:56 #3
Fx:

<?
$find = "01.004";// Varenr
$fil = "text.txt";// Filnavn

$lines = file($fil);
foreach ($lines as $line) {
    list($vare[], $antal[]) = explode(",", $line);
}
while ($val = current($vare)) {
    if ($val == $find) $nr = key($vare);
    next($vare);
}
unset ($vare);
if (isset($nr)) {
    $res = $antal[$nr];// Resultatet ligger i $res
    echo $res;
} else {
    echo "Varen findes ikke!";
}
unset ($antal);
?>
Avatar billede sone Nybegynder
02. december 2003 - 11:56 #4
Det hurtigste (tror jeg) vil være at få læst det hele ind i et array:
$vare['01.001'] = 76
osv.

Du kunne gøre fil-åben/luk tiderne hurtigere ved at gemme serialized($vare) frem for en vare pr. linie - så er du fri for at skulle parse filen hver gang, men læse $vare ind via unserialize.
Avatar billede syswatch Novice
02. december 2003 - 12:30 #5
Detox: Dit svar virkede perfekt, jeg havde dog lavet en lille bummert.
Men komma fil ser sådan her ud:

"01.001",45,0,12,0
"01.002",23,0,0,0

Egentlig skal jeg havde fjernet "" tegene, og så skal beregningen egentlig se sådan her ud: (((45-0)+12)-0)= antal

Hvis du har lidt mere overblik til at sætte koden sammen må du meget gerne, du får pointene under alle omstændigheder.
Avatar billede detox Nybegynder
02. december 2003 - 12:54 #6
Prøv sådan her. Det skulle virke både med og uden " " om dit varenr:

<?
$find = "01.001";// Varenr
$fil = "text.txt";// Filnavn

$fp = fopen($fil, 'r');
while(!feof($fp)) {
    $arr[] = fgetcsv($fp, 128);
}
fclose($fp);
$count = count($arr);
for ($i=0;$i<$count;$i++) {
    if ($find == $arr[$i][0]) {
        $nr = $i;
        break;
    }
}
if (isset($nr)) {
    $antal = $arr[$nr][1]-$arr[$nr][2]+$arr[$nr][3]-$arr[$nr][4];
    echo $antal;
} else {
    echo "Varen blev ikke fundet!";
}
unset($arr);
?>
Avatar billede syswatch Novice
02. december 2003 - 13:16 #7
Detox: Fedt... mange tak.
Avatar billede detox Nybegynder
02. december 2003 - 13:20 #8
Velbekommen c",)
Avatar billede tipsen Nybegynder
02. december 2003 - 14:03 #9
Hvis hele filen bare læses ind, er her et alternativ:

<?php
$strSearch = '01.006';
$strVarer = file_get_contents('text.txt');
$n = sscanf(strstr($strVarer, $strSearch), "$strSearch\",%d,%d,%d,%d", $tal1, $tal2, $tal3, $tal4);
if ($n > 0) {
    $antal = $tal1 - $tal2 + $tal3 - $tal4;
    echo "Antal af vare $strSearch: $antal";
} else {
    echo "Vare nr. $strSearch blev ikke fundet!";
}
?>
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