Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Textdatei auslesen und Einträge in Arrays speichern (https://www.delphipraxis.net/78545-textdatei-auslesen-und-eintraege-arrays-speichern.html)

Koffein Schluck 6. Okt 2006 18:24


Textdatei auslesen und Einträge in Arrays speichern
 
Ich will, dass mein Programm Daten für Arrays aus einer Textdatei laden kann. Dazu hab ich mir folgende Codierung der Textdatei ausgedacht:

Zitat:

Frankfurt, Berlin, München, Oslo, New York, Mainz, Sydney


Frankfurt nach Berlin
Berlin nach Sydney
München nach Mainz
Oslo nach München
Nicht besonders einfallsreich :P Wenn man es anders codieren sollte... kein Problem, bitte sagen xD

Das ist jetzt nur ein Beispiel, es können viel mehr Einträge vorhanden sein. Jedoch wird die Datei nie über 10 Städtenamen aufweisen. Jetzt möchte ich, dass in meinem Programm diese Datei geöffnet und ausgelesen wird. Die Städtenamen sollen in einer TList untereinander erscheinen und die Regeln in einer anderen TList und zusätlich in einem zwei dimensionalem Array, wobei das Array für die Regeln ein "Byte" Array ist und somit nur Zahlen speichern soll. Damit es nicht so trocken ist ein Beispiel:
Die Datei wird ausgelesen
Die erste TList1 wird erstellt mit den Einträgen:

Zitat:

Frankfurt
Berlin
München
Oslo
New York
Mainz
Sydney
Die zweite TList wird erstellt: Man fügt ihr ein Item zu, nämlich "Frankfurt nach Berlin" jetzt wird überprüft, welche Position Frankfurt in der TList1 aufweist, in unserem Beispiel - 0. Jetzt soll diese Position in den ersten Eintrag des Arrays Regeln gespeichert werden: Regeln[0,0] := 0; so, jetzt wird die Position von Berlin in den erste Zeile aber 2 Spalte des Arrays Regeln gespeicher. Regeln[0,1] := 1. Das wird dann Regel für Regel gemacht somit ergibt sich zum Schluss ein Array Regeln mit den folgenden Einträgen:
Delphi-Quellcode:
Regeln = ( ( 0 , 1 ) , ( 1 , 6 ) , ( 2 , 5 ) , ( 3 , 2 ) );
und eine TList:
Delphi-Quellcode:
Frankfurt nach Berlin
Berlin nach Sydney
München nach Mainz
Oslo nach München
Wie realisiere ich das? Ist das möglich? Ich hab mir im Forum so einiges angeguckt, aber die Fälle über die ich gelesen habe, waren sehr komplex und es kam mir so vor, als ob man mein Problem einfacher lösen könnte. :gruebel:

marabu 6. Okt 2006 18:57

Re: Textdatei auslesen und Einträge in Arrays speichern
 
Herzlich willkommen in der Delphi-PRAXiS, Koffein Schluck.

Wenn jede Stadt Teil mindestens einer Regel ist, dann ist die Vorgabe einer Städteliste überflüssig. Ich würde dann die Regeln als Städtepaare formulieren, wobei ich das Literal ' nach ' durch ein Symbol ersetzen würde. Dadurch kann ich die Regeln mit der Methode LoadFromFile() einer TStringList laden und mit den Eigenschaften Names[], Values[] und NameValueSeparator verarbeiten. In einer zweiten (sortierten) StringList füge ich alle Städtenamen einmal hinzu und erhalte durch den Index der Stadt in dieser Liste den benötigten Schlüssel. In einem Durchgang kann ich so die Schlüsselpaare in das zweidimensionale Regel-Array übertragen.

Freundliche Grüße vom marabu

Koffein Schluck 8. Okt 2006 16:46

Re: Textdatei auslesen und Einträge in Arrays speichern
 
Nicht jede Stadt bekommt eine Regel. Die Idee das nach mit einem Zeichen zu ersetzten ist gut, welches Zeichen eignet sich dazu am besten? Wie lese ich den ASCII Code eines Zeichens in einer Textdatei zum Beispiel ist der Code 0134 für dieses Zeichen "†" verantwortlich, lese ich einfach die Zeichen Variable (Typ Char) als Integer aus? :pale: Wär jemand so toll und kann mir vielleicht ein Code schreiben, ich musste bis jetzt nie Dateien auslesen... Ich lese mir noch ein paar Tutorials durch... Aber jetzt sitze ich in einem Internetcafe, also muss ich das auf später verschieben. :roll:

Danke für die Aufnahme im Forum xD , war bis jetzt nur ein "Leser" hab mich erst kürzlich dazu entschlossen mich anzumelden. Mir gefällts hier sehr gut! :thumb:

marabu 8. Okt 2006 19:02

Re: Textdatei auslesen und Einträge in Arrays speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Koffein Schluck
Nicht jede Stadt bekommt eine Regel.

Auch kein Beinbruch.

Zitat:

Zitat von Koffein Schluck
Die Idee das nach mit einem Zeichen zu ersetzten ist gut, welches Zeichen eignet sich dazu am besten?

Ich würde ein Gleichheitszeichen nehmen - weil ich dann auf die eingebauten Fähigkeiten bestimmter Komponenten zurückgreifen kann.

Zitat:

Zitat von Koffein Schluck
Wie lese ich den ASCII Code eines Zeichens in einer Textdatei zum Beispiel ist der Code 0134 für dieses Zeichen "†" verantwortlich, lese ich einfach die Zeichen Variable (Typ Char) als Integer aus?

Du musst dazu die Datei nicht zeichenweise verarbeiten, auch für jedes Zeichen in einem String kannst du mit Ord(s[i]) den Code-Wert ermitteln.

Zitat:

Zitat von Koffein Schluck
Wär jemand so toll und kann mir vielleicht ein Code schreiben, ich musste bis jetzt nie Dateien auslesen...

Ausnahmsweise - im Anhang.

Freundliche Grüße

Koffein Schluck 9. Okt 2006 16:59

Re: Textdatei auslesen und Einträge in Arrays speichern
 
VIELEN DANK! Wusste gar nicht wie effizient man sowas gestalten kann! Großartiger Programmierstil! Hut ab! :shock:
Für alle, die ähnliche Inhalte auslesen wollen ist das Herunterladen der Demo sehr zu empfehlen!
Hatte beim compilieren Probleme mit dem Befehl [i]
Delphi-Quellcode:
FRules[i][True] := NameToKey(ValueFromIndex[i]);[/i]
mein Delphi 6 hat den Befehl "ValueFromIndex" nicht gekannt, hab die Zeile als Kommentar markiert, dann lief das Programm. :coder:




Ich weiß noch nicht was diese Zeilen genau im Code bewirken:
Delphi-Quellcode:
FRules[i][False] := NameToKey(Names[i]);
FRules[i][True] := NameToKey(ValueFromIndex[i]);
Weiß noch nicht was der Befehl ValueFromIndex[i] als Rückgabewert liefert, mein Delphi 6 kennt den Befehl noch nicht und hab bis jetzt noch nie Boolean Arrays gesehen :gruebel: : Wie kann ich denn auf FRules[i][False] etwas speichern und vor allem was speicher ich drauf :oops: ?

marabu 9. Okt 2006 19:50

Re: Textdatei auslesen und Einträge in Arrays speichern
 
Hi,

Zitat:

Zitat von Koffein Schluck
VIELEN DANK!

keine Ursache, das war Mitgliederwerbung. Wenn du jetzt 10 Jahre in der DP bleibst, dann backen die anderen mir einen Rührkuchen.

Zitat:

Zitat von Koffein Schluck
... mein Delphi 6 hat den Befehl "ValueFromIndex" nicht gekannt, hab die Zeile als Kommentar markiert, dann lief das Programm.

Du solltest [i]ValueFromIndex durch [i]Values[Names] ersetzen, wenn TStrings unter D6 diese Methode noch nicht kennt.

Zitat:

Zitat von Koffein Schluck
hab bis jetzt noch nie Boolean Arrays gesehen

In meinem Code hast du aber auch kein array of Boolean gesehen - oder? Wahrscheinlich kommt dir array [Boolean] of Integer spanisch vor, aber das ist nichts anderes als array [0..1] of Integer - bloß, dass im einen Fall True und False als Indexwerte verwendet werden, im anderen 0 und 1. Gespeichert werden aber bei meinem Beispiel Werte des Basistyps (Integer) und nicht des Indextyps (Boolean).

Gute Nacht

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 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