Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datei einlesen: Was eignet sich in diesem Fall am besten? (https://www.delphipraxis.net/82047-datei-einlesen-eignet-sich-diesem-fall-am-besten.html)

arne99 7. Dez 2006 11:00


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:
<Start Wert1="Value"
Wert1="Value1"
Wert2="Value2"
Wert3="Value3"
Ende >

<Start Wert1="Value"
Wert1="Value1"
Wert2="Value2"
Wert3="Value3"
Ende >
So, nun möchte ich gerne den 1. Block auslesen und in eine Listview packen, danach den 2. Block etc.
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!

mkinzler 7. Dez 2006 11:42

Re: Datei einlesen: Was eignet sich in diesem Fall am besten
 
Es gibt einige XML-parser für Delphi

Der_Unwissende 7. Dez 2006 11:51

Re: Datei einlesen: Was eignet sich in diesem Fall am besten
 
Hi,

Zitat:

Zitat von mkinzler
Es gibt einige XML-parser für Delphi

Ich glaube nicht dass das gültiges XML ist. Da fehlen die schließenden Tags und ob man ein Attribut ohne Wert (Ende) verwenden darf... Deswegen wäre ein XML-Parser vielleicht nicht die richtige Wahl.

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. Hier im Forum suchenexplode).

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