


Ein praktischer Leitfaden zum Analysieren von Daten mit fester Breite mit PHP-String-Slicing
Mit Substr () zum Schneiden nach Position ist trim (), um Leerzeichen zu entfernen und die Feldzuordnung zu kombinieren, die Kernmethode zum Analysieren von Daten mit festen Breite. 1. Definieren Sie die Position und Länge der Feldstart oder definieren Sie nur die Breite, um das Startbit nach dem Programm zu berechnen. 2. Verwenden Sie Substr ($ line, $ start, $ Länge), um den Feldinhalt zu extrahieren, und lassen Sie die Länge weg, um den verbleibenden Teil zu erhalten. 3. Auftragen Sie Trim (), um die Füllräume für jedes Feldergebnis zu löschen. 4. Implementieren Sie wiederverwendbare analytische Funktionen durch Schleifen und Schema -Arrays; 5. Kantenfälle wie die Fertigstellung, wenn die Leitungslänge nicht ausreicht, leere Linienausschnitte, fehlende Wertsatzstandwerte und Typüberprüfung; 6. Verwenden Sie Datei () für kleine Dateien, wenn Sie Dateien lesen, um fopen () zu verwenden, um Zeile für die Zeile zu streamen, um den Speicherüberlauf zu verhindern. Diese Methode erfordert keine externen Bibliotheken, ist effizient und leicht zu warten.
Das Parsen mit festen Breitendaten ist eine häufige Aufgabe, wenn es um Legacy-Systeme, Regierungsberichte oder Datenexporte für flache Dateien geht, bei denen Felder nicht von Grenzwerten wie Kommas oder Registerkarten getrennt werden. Stattdessen tritt jedes Feld eine vordefinierte Anzahl von Zeichen in einer Zeile auf. Die Fachfunktionen von PHP - insbesondere substr()
- machen diese Aufgabe unkompliziert und zuverlässig.

Hier erfahren Sie, wie man es richtig macht.
Verständnis für das Format mit festem Breite
In einer Festbreitungsdatei ist jeder Datensatz (Zeile) strukturiert, so dass bestimmte Spalten bestimmte Felder darstellen. Zum Beispiel:

John Doe 35Engineer Jane Smith 28Designer
Hier könnte das Format sein:
- Vorname: 8 Zeichen
- Nachname: 8 Zeichen
- Alter: 2 Zeichen
- Job: Der Rest
Selbst wenn ein Wert kürzer ist (wie "John"), ist er mit Leerzeichen gepolstert, um die Säulenbreite anzupassen. Diese Konsistenz ermöglicht es uns, Daten nach Position zu extrahieren, nicht nach Inhalt.

Verwenden von substr()
, um Felder zu schneiden
Die Funktion von PHP substr($string, $start, $length)
eignet sich perfekt zum Extrahieren von Teilen einer Zeichenfolge nach Position.
$ line = "John Doe 35Engineer"; $ firstName = trim (substr ($ line, 0, 8)); // "John" $ lastname = trim (substr ($ line, 8, 8)); // "Doe" $ age = trim (substr ($ line, 16, 2)); // "35" $ job = trim (substr ($ line, 18)); // "Ingenieur" - Länge weglassen, um sich auszuruhen
Schlüsselpunkte:
-
substr()
verwendet null basierte Indexierung. - Immer
trim()
das Ergebnis zum Entfernen von Polsterräumen. - Wenn Sie das dritte Argument weglassen, gibt
substr()
alles von der Startposition bis zum Ende zurück.
Dieser Ansatz ist schnell und lesbar und erfordert keine externen Bibliotheken.
Definieren einer Feldkarte zur Wiederverwendbarkeit
Hardcoding -Positionen werden mit vielen Feldern chaotisch. Definieren Sie ein Schema:
$ schema = [ ['name' => 'first_name', 'start' => 0, 'Länge' => 8], ['name' => 'last_name', 'start' => 8, 'Länge' => 8], ['Name' => 'Alter', 'Start' => 16, 'Länge' => 2], ['name' => 'Job', 'start' => 18, 'Länge' => 0], // 0 = Rest der Zeile ];
Analysieren Sie nun eine Zeile mit einer Schleife:
Funktion parsefixedWidth ($ line, $ schema) { $ record = []; foreach ($ schema as $ field) { $ value = substr ($ line, $ field ['start'], $ field ['länge']?: null); $ record [$ field ['name']] = trim ($ value); } $ record zurückgeben; } $ line = "John Doe 35Engineer"; $ data = parsefixedWidth ($ line, $ schema); // Ergebnis: ['first_name' => 'John', 'last_name' => 'doe', ...]
Verwenden ?: null
ermöglicht es dem letzten Feld, den Rest der Linie zu erfassen.
Handhabungskantenfälle
Daten in der realen Welt sind nicht immer perfekt. Hier erfahren Sie, wie man sicher bleibt:
Überprüfen Sie die Zeilenlänge vor dem Schneiden:
if (strlen ($ line) <18) { // kurze Zeilen verarbeiten - Protokoll, überspringen oder Pad $ line = str_pad ($ line, 18, ''); }
Verwenden Sie Standardwerte für fehlende oder leere Felder:
$ record ['ay'] = trim ($ ay)?: null;
Validieren Sie numerische Felder :
$ age = trim (substr ($ line, 16, 2)); $ record ['ay'] = is_numeric ($ ay)? (int) $ ay: null;
Leere Zeilen überspringen :
if (trim ($ line) === '') fortsetzen;
Lesen aus einer Datei
Die meisten Daten mit fester Breite stammen aus .txt
oder .dat
Dateien. Verwenden Sie file()
oder fopen()
:
$ line = file ('data.txt', file_ignore_new_lines | file_skip_empty_lines); foreach ($ line as $ line) { $ data [] = parsefixedWidth ($ line, $ schema); }
Verwenden Sie für große Dateien Streaming, um Speicherprobleme zu vermeiden:
$ handle = fopen ('data.txt', 'r'); while (($ line = fGets ($ Handle))! == false) { $ line = trim ($ line); if ($ line) { $ data [] = parsefixedWidth ($ line, $ schema); } } fcLose ($ Handle);
Bonus: Dynamisches Schema mit Offsets
Anstatt die Positionen manuell zu zählen, definieren Sie die Breite und lassen Sie PHP berechnen, startet:
$ fieldwidths = [ ['name' => 'first_name', 'width' => 8], ['name' => 'last_name', 'width' => 8], ['Name' => 'Alter', 'Breite' => 2], ['name' => 'Job', 'width' => 0], // ruhen ]; // Schema mit Startpositionen erstellen $ schema = []; $ pos = 0; foreach ($ fieldwidths as $ field) { $ schema [] = [ 'name' => $ field ['name'], 'start' => $ pos, 'Länge' => $ field ['Breite'] ]; if ($ field ['width']> 0) { $ pos = $ field ['width']; } }
Jetzt geben Sie nur Breiten an - keine Zählspalten auf Papier.
Das Parsinieren von Daten mit festen Breite in PHP muss nicht schmerzhaft sein. Mit substr()
, einem klaren Schema und einigen Verteidigungskontrollen können Sie starre, räumliche Linien in saubere, verwendbare Arrays verwandeln. Unabhängig davon, ob Sie Lohn- und Gehaltsabrechnungsdaten importieren oder alte Mainframe -Exporte verarbeiten, ist diese Methode schnell, zuverlässig und leicht zu warten.
Grundsätzlich: Schneiden Sie nach Position, schneiden Sie die Räume ab und kartieren Sie sie sauber. Das ist der Kern.
Das obige ist der detaillierte Inhalt vonEin praktischer Leitfaden zum Analysieren von Daten mit fester Breite mit PHP-String-Slicing. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

NegativeOffSetsinpythonallowcounting von der Theendofastring, wobei 1Sthelastcharakter, -2isthesen-zu-last und ASOON, Enable-Accesstocharacter mit der KnowledTheSthestrings;

Array_Slice () TreatSnullOffsetsas0, Clampsout of-BoundsOffsetStoreturnEmptyArraySoRlullarrays und HandlesnullLengthas "totheend";

Charaktere undByTesarenotthesameInPhpBecauseutf-8encodingus1to4ByTespercharacter, Sofunctionslikestren () und Substr () canmiscou ntorbreakstrings; 1.Alwaysusemb_strlen ($ str, 'utf-8') forcuratecharacterCount; 2.SEMB_SUBSTR ($ STR, 0,3, 'UTF-8') toSafelyextrahiert

Mit Substr () zum Schneiden nach Position ist trim (), um Leerzeichen zu entfernen und die Feldzuordnung zu kombinieren, die Kernmethode zum Analysieren von Daten mit festen Breite. 1. Definieren Sie die Startposition und Länge des Feldes oder definieren Sie nur die Breite, um das Startbit nach dem Programm zu berechnen. 2. Verwenden Sie Substr ($ line, $ start, $ Länge), um den Feldinhalt zu extrahieren, und lassen Sie die Länge weg, um den verbleibenden Teil zu erhalten. 3. Auftragen Sie Trim (), um die Füllräume für jedes Feldergebnis zu löschen. 4. Verwenden Sie wiederverwendbare analytische Funktionen durch Schleifen und Schema -Arrays; 5. Handlungsfälle wie die Fertigstellung, wenn die Leitungslänge nicht ausreicht, leere Linienüberschnitte, fehlende Werte setzen Standardwerte und Typüberprüfung. 6. Verwenden Sie Datei () für kleine Dateien, um fopen () für große Dateien zu optimieren, um zu optimieren

Vermeiden Sie RawindexMathByCapsulatingSlictlogicinNamedFunctionStoexpressintentandisolateAsStions.2.ValidateInputSearlyWithdefensivChKsandMeaningfulerRormessagestopreventruntimeErrors.3

UseStringViewSorMemory-effizientesReferencesInsteadofCreatingSubstringCopiestoavoidDuplicatingData; 2.ProzessStringsinchunksorstreamstominimizepeakmemoryUSageByReadingAndatlingDataincrementally;

Die Verwendung einer glatten Schnittstelle zum Umgang mit komplexen Stringscheiben kann die Lesbarkeit und Wartbarkeit des Codes erheblich verbessern und die Betriebsschritte durch Methodenketten durchführen. 1. Erstellen Sie die FluentString -Klasse und geben Sie sich nach jeder Methode wie Slice, Reverse, to_upper usw. zurück, um Kettenaufrufe zu unterstützen. 2. Erhalten Sie das Endergebnis durch das Wertattribut; 3.. Extended Safe_Slice verarbeitet Grenzausnahmen; 4. Verwenden Sie IF_Contains und andere Methoden, um die bedingte Logik zu unterstützen. 5. Bei der Log-Parsing oder Datenreinigung macht dieser Modus eine intuitive, leicht zu debugierende und weniger anfällige String-String-Transformation, wodurch letztendlich den eleganten Ausdruck komplexer Operationen erreicht wird.

Die Verwendung von mb_substr () ist der richtige Weg, um das Problem der Unicode-String-Interception in PHP zu lösen, da Substr () durch Bytes schneidet und Multi-Byte-Zeichen (wie Emoji oder Chinesen) in verstümmelten Code abgeschnitten werden; Während mb_substr () nach Zeichen schneidet, die UTF-8-codierte Zeichenfolgen korrekt verarbeiten können, stellen die Ausgabe vollständiger Zeichen sicher und vermeiden Sie die Datenbeschädigung. 1. Verwenden Sie immer mb_substr () für Zeichenfolgen, die Nicht-ASCII-Zeichen enthalten. 2. Geben Sie explizit die 'UTF-8' -Codierungsparameter an oder setzen Sie mb_internal_encoding ('utf-8'); 3. Verwenden Sie mb_strlen () anstelle von strlen (), um die richtigen Zeichen zu erhalten
