AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fremdes Datenformat einfach lesen in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Fremdes Datenformat einfach lesen in Delphi

Ein Thema von Berserker · begonnen am 16. Mai 2006 · letzter Beitrag vom 27. Mai 2006
Antwort Antwort
Seite 2 von 3     12 3      
Robert Marquardt
(Gast)

n/a Beiträge
 
#11

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 16. Mai 2006, 09:59
Na das laedt man am besten erst mal in eine TStringList und zaehlt die Datensaetze durch.
Ich vermute mal das das die zwei Ziffern am Zeilenanfang Zeilenangaben/Elementangaben sind und das ein Uebergang auf einen neuen Datensatz durch eine kleinere Nummer angezeigt wird.
Vermutlich impliziert die Nummer auch eine Typangabe fuer den Inhalt. Man kann also ein passendes Record definieren und nun ein "array of" dieses Records mit SetLength alloziieren. Vermutlich ist die Dokumentation mehr oder minder die Definition eines solchen Records.
Nun klappert man die TStringList nochmal ab und uebertraegt die Daten in die Records. Da braucht man noch die Dokumentation die sagt ob Zeilen fehlen duerfen und was dann der Defaultwert ist.
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#12

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 16. Mai 2006, 11:27
Moin
Warum so kompliziert Da es sich um ein reines Textfile handelt, kann man es doch so machen:
Delphi-Quellcode:
procedure Auslesen;
var S: String;
    F: TextFile;
begin
   Assign(F, Pfad_und_Name_der_Textdatei);
   Reset(F);
   while not Eof(F) do
     begin
       Readln(F, S);
       {hier weitere MAssnahmnen um den String anhand der Doku zu zerlegen und entsprechend neu abzuspeichern}
   end;
   CloseFile(F);
end;
APDATA dürfte ein 'spezielles' Datenformat für Apotheken (Rote Liste für Medikamente etc) sein
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#13

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 16. Mai 2006, 11:50
Das ist ein ineffizienter Weg. Man muss dazu ja dauernd neue Datensaetze alloziieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#14

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 16. Mai 2006, 12:16
Man könnte ja auch erstmal die Datensätze zählen, Speicher allocieren, an den Dateianfang springen und dann Einlesen ... 's wäre zumindestens sparsammer im Speicherverbrauch, dafür ließt man allerdings die Datei zweimal ein
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#15

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 17. Mai 2006, 00:28
Zitat von raiguen:
{hier weitere MAssnahmnen um den String anhand der Doku zu zerlegen und entsprechend neu abzuspeichern}
So isset. Die "weiteren Maßnahmen" stehen oben in #3. Habe das vorweggenommen. Das wäre schon das Grundgerüst für das ganze Programm. Haken an der Sache ist, ob die Definition der alten Daten genau genug ist und ins eigene DB-Konzept paßt. Existiert die überhaupt schon ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Berserker
Berserker

Registriert seit: 15. Dez 2002
Ort: Chemnitz
165 Beiträge
 
Delphi 6 Professional
 
#16

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 27. Mai 2006, 14:43
Hallo.

Also ich bin schon ein Stück weitergekommen.
Ich lese die Textdatei in eine StringList ein und verarbeite diese dann.

Liste laden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 sl := TStringList.Create;
 sl.LoadFromFile('ADR_APO.UPD');
 Memo1.Lines := sl;
end;
Verarbeiten:
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var i: integer;
    zeile: string;
begin
 DS.Open;
 i := 0;
 while i < sl.Count do begin
  zeile := sl.Strings[i];
  Memo2.Lines.Add(zeile);
  if(zeile='00K') then begin
   // Kopfdefinition
   i := Lese_Kopf(i);
  end else if(zeile='00F') then begin
   i := Lese_Feld(i);
  end else begin
   Inc(i);
  end;
 end;
end;
Funktion um den Kopf zu lesen:
Delphi-Quellcode:
{** KOPF LESEN ****************************************************************}
function TForm1.Lese_Kopf(posi: integer): integer;
var i: integer;
    s, s1, prefix, zeile: string;
begin
  // BEGIN Kopf-Record lesen
  for i := 1 to anzahl_felder_k do begin
   Inc(posi);
   zeile := sl[posi];
   prefix := Copy(zeile,1,2);
   s := Copy(zeile,3,length(zeile));
   if( prefix='01') then begin
    edF01.Text := s;
   end else if( prefix='02') then begin
    edF02.Text := s;
   end else if( prefix='03') then begin
    edF03.Text := s;
   end else if( prefix='04') then begin
    edF04.Text := s;
   end else if( prefix='05') then begin
    edF05.Text := s;
   end else if( prefix='06') then begin
    edF06.Text := s;
   end else if( prefix='07') then begin
    edF07.Text := s;
   end else if( prefix='08') then begin
    edF08.Text := s;
    anzahl_tabelle_felder := StrToInt(s);
   end;
   result := posi;
  end;
  // END Kopf-Record lesen
end;
{******************************************************************************}
Für evtl. Verbesserungen bin ich immer offen.
Habe ja bisher noch nie mit solchen Files gearbeitet.

MfG, Ronny
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 27. Mai 2006, 14:57
Du könntest z.B. findComponet verwenden,
damit kannst Du dir die Aufzählung der Edit Componente (edF01, edF02 ..) sparen

Grüße
Klaus

Delphi-Quellcode:
{** KOPF LESEN ****************************************************************}
function TForm1.Lese_Kopf(posi: integer): integer;
var i: integer;
    s, s1, prefix, zeile: string;
begin
  // BEGIN Kopf-Record lesen
  for i := 1 to anzahl_felder_k do
    begin
      Inc(posi);
      zeile := sl[posi];
      prefix := Copy(zeile,1,2);
      s := Copy(zeile,3,length(zeile));
  
      TEdit(FindComponent('edF' + prefix)).text:=s;
 
      anzahl_tabelle_felder := StrToInt(s);
   end;
   result := posi;
  end;
  // END Kopf-Record lesen
end;
{******************************************************************************}
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Berserker
Berserker

Registriert seit: 15. Dez 2002
Ort: Chemnitz
165 Beiträge
 
Delphi 6 Professional
 
#18

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 27. Mai 2006, 15:18
Stimmt. Das ist natürlich wesentlich einfacher

Gibt es eine Möglichkeit, das ich via ReadLn Blockweise aus dem Textfile lesen kann?

Beispiel vom File:
00K
01ADR_APO
02UPD
0320060515
0420060501
05Testlieferant XYZ
06Adressen
071001
0815
00F
0101
02Key_ADR
031
040
05V
065
07NU1
00F
0102
02Firmenname
030
040
05V
0640
07AN1


Im Textfile gibt es mehrere Blöcke:

00K <- Beginn Kopfsatz (Dieser kommt nur einmal vor)
01(Dateiname)
02(Update oder Gesamtdatei)
03(Datum von)
04(Datum bis)
05(Lieferant)
06(Dateiname Lang)
07(Datei-ID
08(Anzahl der Felder)

Danach kommen die Feld-Definitionen
00F <- Begin einer Felddefinition (können mehrmals vorkommen, pro Feld ein solcher Block)
01 \
02 +--- Da stehen dann Feldname, Größe und so weiter
03 /

00D,00I,00U sind dann die Datensätze wobei D-Delete, I-Insert, U-Update ist
011449

Könne man dies nicht blockweise lesen und dann verarbeiten?
Wenn ja wie kann man dies bewerkstelligen?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 27. Mai 2006, 15:30
Da die Datei nicht Datensatz orientiert (indiziert) ist geht es
wohl nicht anders.

Es sei denn die Zeilen sind alle gleich lang, dann könntest
Du eine gewisse Byteanzahl einlesen. (BlockRead)

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Berserker
Berserker

Registriert seit: 15. Dez 2002
Ort: Chemnitz
165 Beiträge
 
Delphi 6 Professional
 
#20

Re: Fremdes Datenformat einfach lesen in Delphi

  Alt 27. Mai 2006, 15:32
Also der Kopf ist immer 8 Zeilen Lang
die Felder-Defs sind immer 7 Zeilen lang
und die Feldzeilenanzahl ergibt sich ja durch die anzahl der Felder
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:34 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