Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Textdatei ohne Trennzeichen verarbeiten (https://www.delphipraxis.net/128964-textdatei-ohne-trennzeichen-verarbeiten.html)

Bali 10. Feb 2009 10:12


Textdatei ohne Trennzeichen verarbeiten
 
Hallo zusammen,

ich habe folgendes Problem:
1. bin ich erst vor kurzen in die Delphi Welt geworfen worden :)

2. jetzt muss ich ein Programm abändern das in meinen Augen nicht so leicht wird, bzw. hab ich schon viel gegoogled und hab nichts brauchbares gefunden :(

In dem Programm hab ich bis heute eine *.dbf Datei eingelesen und verarbeitet, hab auch den Quelltext sehr gut verstanden.
Aber nun werden wir ein neues System bekommen und wir werden nur noch einen TextFile bekommen, der in etwa so aussieht:

00099Max Mustermann Holzweg 43 002300 etc .......

Ich muss jetzt quasi den TextFile ohne Trennzeichen verarbeiten.

Zur Info:
Stringstellen--Bedeutung
1-5 ------------ Kundennummer
6 - 24 --------- Vor und Nachname
25 - 38 -------- Straße
39 - 44 -------- Gehalt

Meine Frage ist jetzt, wie kann ich den File am besten bearbeiten ?

Um noch genauere Informationen zu geben,
das sind etwa 40 verschiedene Daten in einer Zeile und der File wird recht groß sein.
Jede Zeile soll gelesen werden und jeder Wert sollte in einer Variable stehen um ihn zu verarbeiten können.

Beispiel meiner Vorstellung:

TextFile lesen bis EoF
-- Variable1 := Kundennummer
-- Variable2 := Vor und Nachname
-- ect........

-- Abfrabe auf Kundennummern (es dürfen nur Kundennummern zwischen 00001 und 001000)
---- Daten verarbeiten

nächste Zeile lesen

Hoffe es ist einigermaßen verständlich was ich meine und das mir bitte einer helfen kann.

Dankeschön
Bali

nuclearping 10. Feb 2009 10:20

Re: Textdatei ohne Trennzeichen verarbeiten
 
Wenn alle Einträge fixe Längen haben, kannst du sie entweder als Stringliste einlesen und dann mit den Stringfunktionen "Copy" arbeiten.
Oder du machst eine typisierte Datei über "File of MyFileRecord", wo du den Record mit den Längen der Datensätze deklarierst.
Delphi-Quellcode:
type
  MyFileRecord = record
    CustNr: String[5];
    Name: String[18];
    ...
  end;
Und dann mit den TextFile Operationen AssignFile, Read, CloseFile. Da hab ich aber nicht so praktische Erfahrungen mit.

Mavarik 10. Feb 2009 10:22

Re: Textdatei ohne Trennzeichen verarbeiten
 
Hi!

Also zu Fuß oder einfach es gibt sicherlich 100 Ansätze..

Wir wäre es mit einem Record
Delphi-Quellcode:
{$A1}
TAdresse = Record
              KNR : array[0..5] of char
              KundenName : array[0..18] of char;
           end;

var
  Zeile : String;
  F    : Textfile;
  Adresse : TAdresse;

begin
  Readln(F,Zeile);
  Move(Zeile[1],Adresse,sizeof(Adresse));
end;
Grüsse Frank :coder:

Bali 10. Feb 2009 10:32

Re: Textdatei ohne Trennzeichen verarbeiten
 
Geht ja superschnell hier :) Dankeschön schon mal.

Also, die Text Datei wird immer gleich bleiben in Sachen Record Länge, sie kann nur von der Anzahl der Records sich ändern.

Ok, Ok ... soweit habe ich eure Idee verstanden, find ich auch sehr gut.

Nur stell ich mir jetzt die Fragen ....

1. Wo bitte genau muss ich den Record definieren ?
zwischen Procedure TextDatei.test
und
var ?

2. Das mit dem Record erstellen hab ich verstanden, das mit den var ein bisschen, aber das mit den Readln nicht so gut :(
muss ich dann einen Zähler noch einbauen ?!

MfG
Bali

Sir Rufo 10. Feb 2009 10:32

Re: Textdatei ohne Trennzeichen verarbeiten
 
Oder über den ODBC-Text-Treiber und einer passenden Schema.ini -> http://msdn.microsoft.com/en-us/library/ms709353.aspx

cu

Oliver

p80286 10. Feb 2009 10:33

Re: Textdatei ohne Trennzeichen verarbeiten
 
Hallo Bali,

ich schlage Dir folgendes vor
a) einlesen der Textdatei und überprüfung der Satzlänge, rein theoretisch müssten alle Sätze gleich lang sein.

b) Definition eines Records und eines Lesebuffers:
Delphi-Quellcode:
Const
  maxsatzlang= 44+2; {satzlänge+2 CRLF }
Type
    tDatensatz : record
      Kundennummer = array [1..5] of char;
      Name        = array [6..24] of char;
      ...

Var
 Lesezeile : array [1..maxsatzlang];
 LeseSatz : tDatensatz;
Die Definition der Arrays ist recht ungewöhnlich erleichtert Dir aber die Orientierung im Bezug auf die Quelldaten.
Es spricht natürlich nichts dagegen 0 oder 1 basiert zu arbeiten.

b) danach einlesen jeweils eines Satzes(x Byte+2 [CRLF] ) oder mehrerer Sätze(n*(xByte+2))
c) move(Lesezeile[1],Lesesatz,maxsatzlang);

Danach stehen Dir alle Felder innerhalb eines Records zur Verfügung.

b & c müssen natürlich vom Anfang der Datei bis zum bitteren Ende mehrfach ausgeführt werden.

Es spricht natürlich nichts dagegen das alles objektorientiert zu definieren, insbesonders im Hinblick auf spätere Wartung.
Ich hoffe das hilft Dir weiter.

Gruß K-H

(ich tippe einfach zu langsam!)

Sir Rufo 10. Feb 2009 10:36

Re: Textdatei ohne Trennzeichen verarbeiten
 
hmmm, glaubt ihr wirklich, dass das einfacher ist, als eine Schema.ini anzulegen und dann mit TADOTable / TADOQuery darauf zuzugreifen?

Einziger Nachteil bei diesem Zugriff: Read-Only!

cu

Oliver

p80286 10. Feb 2009 10:37

Re: Textdatei ohne Trennzeichen verarbeiten
 
Hallo Oliver,

der ODBC-Treiber ist eine interessante Idee,
hast Du da Erfahrungen?

Gruß
K-H

p80286 10. Feb 2009 10:39

Re: Textdatei ohne Trennzeichen verarbeiten
 
naja wenn ADO fehlt (bei D7 Personal) ist die ODBC-Lösung nicht das wahre.

Gruß K-H

Bali 10. Feb 2009 10:40

Re: Textdatei ohne Trennzeichen verarbeiten
 
@ Sir Rufo

Ich muss die Datei auch nur lesen.

Das mit dem Record erstellen finde ich eigentlich recht gut, nur steig ich da nicht ganz durch :(

Sorry, bin halt noch kein erfahrener Delphi Programmierer -.-


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 Uhr.
Seite 1 von 3  1 23      

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