Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Mavarik 10. Feb 2009 10:42

Re: Textdatei ohne Trennzeichen verarbeiten
 
Zitat:

Zitat von Sir Rufo
hmmm, glaubt ihr wirklich, dass das einfacher ist, als eine Schema.ini anzulegen und dann mit TADOTable / TADOQuery darauf zuzugreifen?
cu

Oliver

Achherje...

Naja warum auch nicht... 10.000 Anweisung und Treiber für ein Problem welches sich mit einem simplen Move lösen läßt!
Delphi-Quellcode:
var
  Zeile, Kundenname : Shortstring;
begin
...
  Readln(f,Zeile);

  Move(Zeile[6],Kundenname[1],18);
  Kundenname[0] := #18;
end;
Frank :zwinker:

Mavarik 10. Feb 2009 10:48

Re: Textdatei ohne Trennzeichen verarbeiten
 
Oder nimm einfach:
Delphi-Quellcode:
{$A1}
type
  TAdresse = record
               Kundennummer : String[5];
               Kundenname  : String[18];
               Strasse     : String[13];
             end;

var
  Zeile : String;
  f    : Textfile;
  Adresse : TAdresse;
begin
  While not(eof(f)) do
    begin
      readln(f,Zeile);
      with Adresse do
        begin
          Kundennummer := Copy(Zeile,1,5);
          Kundenname  := Copy(Zeile,6,18);
          Strasse     := Copy(Zeile,39,Sizeof(Strasse)-1); // oder so
        end;
    end;
end;
Grüsse Frank :mrgreen:

Sir Rufo 10. Feb 2009 10:56

Re: Textdatei ohne Trennzeichen verarbeiten
 
Zitat:

Zitat von Mavarik
Zitat:

Zitat von Sir Rufo
hmmm, glaubt ihr wirklich, dass das einfacher ist, als eine Schema.ini anzulegen und dann mit TADOTable / TADOQuery darauf zuzugreifen?
cu

Oliver

Achherje...

Naja warum auch nicht... 10.000 Anweisung und Treiber für ein Problem welches sich mit einem simplem Move lösen läßt!
Delphi-Quellcode:
var
  Zeile, Kundenname : Shortstring;
begin
...
  Readln(f,Zeile);

  Move(Zeile[6],Kundenname[1],18);
  Kundenname[0] := #18;
end;
Frank :zwinker:

Wenn ich mit dem programm flexibel bleiben möchte, dann ändere ich die Schema.ini, wenn sich die Spaltenbreiten ändern, ohne Programmierung.
Und ansonsten kümmer ich mich nur um die Verarbeitung der Sätze, die mir mundgerecht schon als einzelner Record geliefert werden.

Einschränkung der Datensätze mittels SQL-Befehlen (via TADOQuery)

Ob das Nachteile sind? Gut, wenn kein ADO vorhanden ... dann bleibt nur die Record-Variante ... aber muss ich mich als Programmierer um alles kümemrn ... oder darf ich auch Vorhandenes benutzen?

cu

Oliver

Bali 10. Feb 2009 10:58

Re: Textdatei ohne Trennzeichen verarbeiten
 
oh mann .... irgendwie stehe ich heute aufn Schlauch :(

Ich versteh nicht, warum mann das braucht:

Delphi-Quellcode:
type
  TAdresse = record
               Kundennummer : String[5];
               Kundenname  : String[18];
               Strasse     : String[13];
             end;
wenn man später das macht:

Delphi-Quellcode:
Kundennummer := Copy(Zeile,1,5);
          Kundenname  := Copy(Zeile,6,18);
          Strasse     := Copy(Zeile,39,Sizeof(Strasse)-1); // oder so
Ich dachte auch das ich evtl. mit AssignFile arbeiten muss ... weil die .txt Datei auf dem Server liegt ...

C:\Temp\personal.txt (Beispielpfad)

Sir Rufo 10. Feb 2009 11:04

Re: Textdatei ohne Trennzeichen verarbeiten
 
Delphi-Referenz durchsuchenAssignFile hat aber nix damit zu tun, dass eine Datei auf einem Server liegt!

Ich weise einer Datei-Variablen eine Datei zu.

Delphi-Quellcode:
var
  ZeigerAufDatei : Text;
begin
  AssignFile( ZeigerAufDatei, 'C:\Der\Pfad\zu\meiner\Datei.txt' );
  ...
end;

globetrotter77 10. Feb 2009 11:05

Re: Textdatei ohne Trennzeichen verarbeiten
 
oder die ganz banale Methode (ist für Anfänger oft leichter zu verstehen)

Delphi-Quellcode:
assignfile(eingabedatei,'hier kommt der Dateiname hin');
reset(eingabedatei);

while not eof(eingabedatei) do
begin
  readln(eingabedatei, eingabezeile);
  kundennummer:=trim(copy(eingabezeile, 1, 5));
  vollername:=trim(copy(eingabezeile, 6, 19));
  strasse:=trim(copy(eingabezeile, 25, 14));
  etc.
end;

closefile(eingabedatei);
Bei der Copy-Funktion musst du als Parameter die erste Position und die Länge übergeben, die musst du also einmal für alle Felder ausrechnen.
Die Trim-Funktion sollte man nicht vergessen, weil man sich sonst lauter überflüssige Leerstellen in die Daten reinholt.
Auf diese Art erhält man die Daten jeweils in String-Format. Falls numerische oder Datums-Angaben enthalten sind, müssen diese noch entsprechend umgewandelt werden!

PS: das mit dem Record funktioniert nur, wenn du Arrays verwendest. Dann musst du aber auch noch mal rumschieben, um die Daten auch auswerten zu können.
Bei Strings in der Record-Definition fällst du auf die Nase ... das liegt an dem Längenbyte, das auch Mavarik schon angesprochen hat (ansprechbar mit stringname[0]) ... dieses ist aber in der Eingabedatei nicht enthalten.

Bali 10. Feb 2009 11:09

Re: Textdatei ohne Trennzeichen verarbeiten
 
Ja Sir Rufo,

habs bissl blöd formuliert, sorry

globetrotter77 10. Feb 2009 11:11

Re: Textdatei ohne Trennzeichen verarbeiten
 
Zitat:

Zitat von Sir Rufo
Wenn ich mit dem programm flexibel bleiben möchte, dann ändere ich die Schema.ini, wenn sich die Spaltenbreiten ändern, ohne Programmierung.
Und ansonsten kümmer ich mich nur um die Verarbeitung der Sätze, die mir mundgerecht schon als einzelner Record geliefert werden.

Damit hast du natürlich recht, aber man darf die Leute auch nicht überfordern!
Im übrigen lässt sich das auch ohne ADO mit passender INI lösen, z.B. so:
Delphi-Quellcode:
[Feldlaengen]
Kundennummer=5
Vollername=19
Strasse=14
etc.
Dann kann man sich die Positionen im Programm auch ausrechnen.

Bali 10. Feb 2009 11:13

Re: Textdatei ohne Trennzeichen verarbeiten
 
Super Globetrotter77 !

Sowas habe ich gesucht :)

da hätte ich jetzt nur noch eine Frage, wie ich die eingabedatei definiere ?

string oder ?

Dankeschön euch allen, ich probiers gleich mal aus und gebe noch einmal ein Feedback ^^

globetrotter77 10. Feb 2009 11:15

Re: Textdatei ohne Trennzeichen verarbeiten
 
Delphi-Quellcode:
var eingabedatei: TextFile;
  eingabezeile: string;
  kundennummer: string;
begin
  assignfile(eingabedatei,'test.txt');
  reset(eingabedatei);
  while not eof(eingabedatei) do
  begin
    readln(eingabedatei);
    kundennummer:=Trim(copy(eingabezeile,1 , 5));
    ...
  end;
  closefile(eingabedatei);
Edit: reset hat gefehlt


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz