AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Datei einlesen: Was eignet sich in diesem Fall am besten?
Thema durchsuchen
Ansicht
Themen-Optionen

Datei einlesen: Was eignet sich in diesem Fall am besten?

Ein Thema von arne99 · begonnen am 7. Dez 2006 · letzter Beitrag vom 7. Dez 2006
Antwort Antwort
Benutzerbild von arne99
arne99

Registriert seit: 11. Jan 2005
Ort: Hamburg
158 Beiträge
 
Turbo Delphi für Win32
 
#1

Datei einlesen: Was eignet sich in diesem Fall am besten?

  Alt 7. Dez 2006, 12:00
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!
Arne
// u know? ID Service www.topsta.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 7. Dez 2006, 12:42
Es gibt einige XML-parser für Delphi
Markus Kinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

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

  Alt 7. Dez 2006, 12:51
Hi,

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz