Autor Beitrag
CASS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Fr 11.11.05 12:40 
Hallo Leute,

ich hätte mal wieder ne Frage. Wie würded ihr beim laden einer Datei mit einer festen Breite von 80 und Steuerzahlen in den ersten Beiden Zeichen vorgehen?

Als Beispiel die GAEB90 Datei.
Sie hat folgenden Aufbau:

SSTTTTT....TTTTLLLLLL

S -> Steuerzahl: Gibt an was in der Zeile dargestellt wird: Z. B. Firmenname oder Pos. oder Pos. Text....
T -> Text bzw. Inhalt der Zeile
L -> Laufendenummer der Zeile.

Wie würdet ihr so eine Datei einladen, dass man nachher auf alles zugreifen kann? Z. B.
ausblenden Delphi-Quelltext
1:
2:
3:
Datei.Firma1 := "Meier Huber xyz"
Datei.Pos[3] := "Schachtel Steichhölzer"
usw.


Danke für eure Ansätze...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 11.11.05 12:48 
Record mit 4 Teilen:
- Steuerschlüssel
- Textbereich
- Zeilenzähler (steht am Ende 6 Zeichen iirc)
- Dummy für Zeilenumbruch (2 Zeichen)

oder als Textdatei behandeln und parsen.

Das ganze schön in eine verkettete Liste oder ein dynamisches Array verpacken.
CASS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 160

WIN XP
D7 Enterprise
BeitragVerfasst: Fr 11.11.05 12:56 
Und das ganze mit ner Schleife durchgehen, oder?
Und je nach Steuerzeichen halt verschieben, richtig?

Merci dir schon mal.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 11.11.05 13:31 
Im Prinzip ja. Hängt natürlich von den Steuerkennzeichen ab.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 11.11.05 19:20 
Hallo,

hier mal eine Ausschnitt einer solchen Datei, damit man sieht worum es geht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
T0                                                                        000001
T1Vorbemerkungen                                                          000002
T9                                                                        000003
00        83L                                                 1122PPPPI90 000004
01MWM-Primo Musterdatei                   030701                       X  000005
02Bonner Wasserwerk                                                       000006
03Bundesregierung                                                         000007
08EURO  EURO                                                              000008
1101       N                                                              000009
12L O S : 1                                                               000010
110100     N                                                              000011
12Entwässerungsleitung aus Kunststoffrohren                               000012
2101000001 NNN         00000093000m                                       000013
2301000001  00000125040 000001162873                                      000014
25Entwässerungsleitung aus                                                000015
26   Kunststoffrohren nach statischen Erfordernissen nach                 000016


Die Zeilennummer am Ende brauchst Du nicht, da sie immer fortlaufend ist bzw. sein sollte,
und Du einen Schleifenzähler hast.
Am besten kannst Du das mit Case realisieren, in etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
s := Zeile[X];
if s[1] = 'T' then
  case s[2] of
    '0' : ReadT0(s);//Zeilenart T0 interpretieren und auswerten
    '1' : ReadT1(s);//          T1      "
//... kein T dann
K := StrToInt(Copy(s,1,2));
    Case K of
      11: Read11(s); //Zeilenart 11 interpretieren und auswerten     
      21: Read21(s); //          21      " 
//...


Daran denken, das dass GAEB-Format nicht immer eingehalten wird :? ,
und Du die daraus resultierenden Fehler abfangen musst.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )