Hallo,
da ich mich mal wieder in php einüben wollte, mache ich momentan die Info-HAs alle mit php, anstatt mit Delphi.
Momentan geht es da um ein Simulation eines ASM-Modell.
Die Eingabe besteht aus mehreren Zeilen, wobei eine Zeile ein ASM-Code ist. Dem entsprechend sind die Parameter in der gleichen Zeile - und zwar durch Leerzeichen getrennt.
Das habe ich jetzt so weit in Arrays aufgetrennt.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| <?php function ExplodeASMCode($asm){ //Zeilenumbruchsbehandlung $asm = str_replace(chr(13).chr(10), chr(13), $asm); $asm = str_replace(chr(10), chr(13), $asm); //String in Zeilenweises Array zerlegen $lines = explode(chr(13), $asm); //Zeilen bearbeiten for ($i = count($lines)-1; $i>-1; $i--){ //Kommentare entfernen $compos = strpos($lines[$i], '//'); if ($compos != 0) $lines[$i] = substr($lines[$i], 0, $compos); $lines[$i] = trim($lines[$i]); //übrige in Array einteilen if ($lines[$i] != ''){ $linepart[$i] = explode(' ', $lines[$i]); //alle Leerstellen entfernen reset($linepart[$i]); foreach ($linepart[$i] as $key => $val){ if ($val === ''){ unset($linepart[$key]); } } } } var_dump($linepart); return 0; } ?> |
Allerdings hat der Code Probleme mit mehreren Leerzeichen. Also wenn z.B. zwischen dem ASM-Befehl und dem Arbeitsregister 2 Leerzeichen fürgt explode noch ein Leerstring ein. Diese wollte ich nun entfernen. Aber unset funktioniert dort nicht. Weiß einer von euch wieso?
PS: Falls einer eine bessere Variante für die Zeilenumbrüche hat, wäre ich dankbar.
Grüße
Heiko
//EDIT: Als ich mir hier den Quelli nachm abschicken noch einmal anguckte, viel mehr der Fehler auf... . Statt unset($linepart[$key]); muss es unset($linepart[$i][$key]); sein