PDA

Vollstndige Version anzeigen : Datei einlesen und weiterverarbeiten


LudwigB
17-06-2004, 22:53
Hallo,

ich arbeite an einem php-script, bei dem eine Datei Zeile fr Zeile eingelesen wird, bei bereinstimmung eines Eintrags, soll ein anderer string aus dieser Zeile fr eine weitere Berechnung ausgelesen werden.
Konkret wird aus einem anderen script (mit POST) eine Variable bertragen (input1 und input2 - die beiden werden auch korrekt bertragen). In der "datei.txt" befinden sich ca. 10000 Zeilen (mit jeweils 8 getrennten Werten pro Zeile).
Mein script sollte nun folgendes machen: die Variable $input1 (wurde eingegeben und wird auch korrekt bertragen, das hab ich schon getestet) soll mit den Eintrgen verglichen werden und bei bereinstimmung sollen zwei weitere Werte aus der Zeile fr die weitere Verarbeitung im php-script bereitgestellt werde. (fr $input2 dasselbe nochmal. Leider funktioniert es so nicht. Die Datei wird zwar korrekt eingelesen (und ich kann mir auch die Variablen z.B. von buffer[3] anzeigen lassen, aber der Vergleich funktioniert nicht, bekomme ich keine Variablen $x1, $y1,... (und den passenden Eintrag gibt es, also $input == $buffer[3] msste er finden).
Wahrscheinlich ist es ein einfacher Anfngerfehler, aber ich finde keine Lsung dafr. Ich bin fr jede Hilfe dankbar.

//datei einlesen
$handle = fopen ("datei.txt", "rb");

// zeile fr zeile einlesen
while (!feof ($handle)) {
$buffer = fgets($handle, 4096);
$buffer = explode("t", $buffer);
$buffer[0];
$buffer[1];
$buffer[2];
$buffer[3];
$buffer[4];
$buffer[5];
$buffer[6];
$buffer[7];

if ($input1 == $buffer[3]) { $x1=$buffer[1] ;
$y1=$buffer[2] ; }


if ($input2 == $buffer[3]) { $x1=$buffer[1];
$y2=$buffer[2];}
}

feuervogel
18-06-2004, 00:10
schau dir mal file() (http://de3.php.net/file) an...damit sollte der schleifdurchlauf etwas simpler werden.

zweitens:

was soll

$buffer[0];

$buffer[1];

$buffer[2];

$buffer[3];

$buffer[4];

$buffer[5];

$buffer[6];

$buffer[7];

???

drittens:

if( !$input1 || !$input2 )
die( "input1 oder input2 ist leer" );

if ( $buffer[3] == $input1 ) {
$x1=$buffer[1] ;
$y1=$buffer[2] ;
echo "eins";
} elseif ( $buffer[3] == $input2 ) {
$x1=$buffer[1];
$y2=$buffer[2];
echo "zwei";
}

mach das mal bitte so...aber ohne die dateistruktur zu sehen, ist das sehr schwer...poste doch mal 10 zeilen...

LudwigB
18-06-2004, 00:48
Hallo,

Danke mal fr die Antwort, ich poste hier kurz die Dateistruktur, den Rest mache ich morgen - muss frh raus.

Derzeit interessieren mich nur der zweite, dritte und vierte Eintrag. Also bei bereinstimmung (von $input1) mit 'Name1a' sollen 148 als Variable x1 und 1 als Variable y1 verwendet werden; bei 'Name1f' dann wren es 3 und 2, usw. (Die anderen Eintrge in der Datei sind - vorerst- ohne Bedeutung fr mich, werden evtl. spter mal genutzt)


148 148 1 'Name1a' 1 'Name2a' 'Name3a' 2771
149 149 1 'Name1b' 1 'Name2b' 'Name3b' 3823
150 150 1 'Name1c' 1 'Name2c' 'Name3c' 2506
151 1 2 'Name1d' 2 'Name2d' 'Name3d' 97
152 2 2 'Name1e' 2 'Name2e' 'Name3e' 97
153 3 2 'Name1f' 2 'Name2f' 'Name3f' 97


lg,
Ludwig

feuervogel
18-06-2004, 20:02
es scheint da probleme mit dem tab t zu geben. der trennt die wohl nicht richtig oder sowas...habs jetzt mals so probiert und ich ich die spalten von hand per tab-taste trenne gehts...

<?PHP

$vergla = "'Name1a'";
$verglb = "'Name1b'";

$farr = file( "./text.txt" );

foreach( $farr as $v ) {

$varr = explode("t", $v );

print_r( $varr );
echo "<br>";

if ( $varr[3] == $vergla ) {
$x1=$varr[1] ;
$y1=$varr[2] ;
} elseif ( $varr[3] == $verglb ) {
$x1=$varr[1];
$y2=$varr[2];
}

}

echo $x1 . " und " . $y1;;
echo "<br>";
echo $x2 . " und " . $y2;

?>

txt-datei sieht so aus:

148 148 1 'Name1a' 1 'Name2a' 'Name3a' 2771
149 149 1 'Name1b' 1 'Name2b' 'Name3b' 3823
150 150 1 'Name1c' 1 'Name2c' 'Name3c' 2506
151 1 2 'Name1d' 2 'Name2d' 'Name3d' 97
152 2 2 'Name1e' 2 'Name2e' 'Name3e' 97
153 3 2 'Name1f' 2 'Name2f' 'Name3f' 97