[PHP] .txt Datei parsen

goto;

Erfahrenes Mitglied
Hallo liebe Community,

heute habe ich von meinem Kunden Ersatzteilisten bekommen, die nun ins System eingepflegt werden müssen.

Problem dabei ist, dass der Händler mir keine .csv oder äh. liefern kann.
Somit habe ich nun 34-Datein mit rund 50t Zeile die wie folgt aussehen:
PHP:
ACA008138      NOCKENWELLE                      112.77                3     AC00008A1380                  
ACA11586       BENZINMOTOR ALN330 WB ES + REV  1193.97                2     ACA32023

Spalte1 = Artnr.
Spalte2 = Name
Spalte3 = Preis
Spalte4 = x
Spalte5 = Ersetzt-Artnr

Es gibt leider keine einfach möglichkeit dieses einzulesen, denn einfach nach Leerzeichen filtern wirde nicht funktionieren, da auch im Namen Leerzeichen drin sind.

Jedoch habe ich eine Idee:

Gibt es eine möglichkeit das ganze nach länge zu beschrenken?

Mit ist aufgefallen, dass die Artikelnr eine max länge hat, genauso wie Name etc.

Bsp. das man sagt:
Artikelnr. von 0 bis 25 Zeichen
Name von 25 bis 50 usw.

Vielen dank
 
Seh ich das Richtig, dass dies ein Fix-Format ist. Sprich jede Spalte hat ihre fixe Länge. Dann ists einfach

Bsp:
PHP:
//Ich simuliere hier das Resultat von file()
$textRows[] = 'a  aus der Au       15';
$textRows[] = 'b  von Tobler       8';

//Die Spalten definieren
$colLengths = array('code' => 3, 'name' => 17, 'value' => 3);

$rows = array();
//Jede Zeile durchgehen
foreach($textRows as $textRow){
    //Alles zurücksetzen
    $pos = 0;
    $row = array();
    //Alle Spalten durchgehen
    foreach($colLengths as $colName => $colLength){
        //Ein Array mit den Spalten als Key und dem Abschnitt als Value erstellen
        $row[$colName] = trim(substr($textRow, $pos, $colLength));
        //Neue Position bestimmen
        $pos += $colLength;
    }
    //Zeilen in einem Array sammeln
    $rows[] = $row;
}

print_r($rows);

Ausgabe:
PHP:
Array
(
    [0] => Array
        (
            [ code ] => a
            [name] => aus der Au
            [value] => 15
        )

    [1] => Array
        (
            [ code ] => b
            [name] => von Tobler
            [value] => 8
        )

)
 
Hallo,
ja genau richtig. Jede Spalte hat eine Maximale länge die in jedem Dokument gleich ist.
Ich werde das mal testen.

Tausend Dank :)
 
Kleiner Unterschied: [Maximale Länge] <> [Fixe Länge]
Was du da hast ist Fixe Länge. Jedes Feld wird auf diese Länge mit Leerzeichen aufgefüllt.
Maximal Länge würde bedeuten, dass die Felder in jeder Zeile unterschiedlich lang sein können - einfach nicht länger als die Maximale Länge.
 
Zurück