![]() |
Datei einlesen: Was eignet sich in diesem Fall am besten?
Hallo liebe DP'ler!
Ich brauche heute mal eure Hilfe. Ich möchte mit meinem Programm eine Datei öffnen (XML/TXT etc) und folgendes auslesen: (Bitte beachtet die Struktur - Beispielhaft!)
Delphi-Quellcode:
So, nun möchte ich gerne den 1. Block auslesen und in eine Listview packen, danach den 2. Block etc.
<Start Wert1="Value"
Wert1="Value1" Wert2="Value2" Wert3="Value3" Ende > <Start Wert1="Value" Wert1="Value1" Wert2="Value2" Wert3="Value3" Ende > Jedoch kann ich die Blöcke nicht an einer ID festmachen, weil die beide mit "<Start" beginnen. Muss man hier mit einer While..do Schleife arbeiten? Wie würdet ihr das Einlesen realisieren? Danke vorab! |
Re: Datei einlesen: Was eignet sich in diesem Fall am besten
Es gibt einige XML-parser für Delphi
|
Re: Datei einlesen: Was eignet sich in diesem Fall am besten
Hi,
Zitat:
Da du hier ein komplett unbekanntes Format einlesen willst, würde ich dir dazu raten es mittels einem FileStream (und damit ein wenig per hand) zu machen. Lies einfach die Datei in kleinen Stücken in einen Puffer (zur idealen Puffgröße findest du bestimmt einige Meinungen in der DP, ist eher Erfahrungssache und eine Abschätzung als immer konst.). Einen solchen Puffer kannst du beliebig interpretieren, in deinem Fall z.B als einen String (oder halt ein Array von Char). Jedenfalls kannst du leicht den Inhalt des Puffers anhand des gesuchten Zeichens trennen. Du kopierst dazu einfach den Teilstring zwischen < und >. Dazu kannst du natürlich einerseits auf eine while-Schleife zurück greifen, aber auch die Funktion Pos oder halt alle bekannten String-Matching-Algorithmen sollten hier weiter helfen (auch hier findest du sicher viel in der DP, z.B. ![]() Hast du die Strings, solltest du dann in einer anderen Routine das Interpretieren dieser Strings übernehmen. Dazu extrahierst und konvertierst du einfach die Werte, so wie du es brauchst. Um hier flexibel zu bleiben, solltest du die Interpretation dieser Strings in einer Basisklasse abstrakt erstellen. Innerhalb der Basisklasse kannst du so einfach auf die Methode zurückgreifen, eine abgeleitet Klasse muss sie aber erst implementieren! Somit hast du dann eine Basisklasse, die eine Datei einliest und in Token zerlegt, wie diese Token ausgewertet werden ist aber davon unabhängig (kann von jedem Nachfolger individuell implementiert werden). Gruß Der Unwissende |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz