Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   viel Mist in einer Textdatei (https://www.delphipraxis.net/123727-viel-mist-einer-textdatei.html)

BAMatze 7. Nov 2008 08:07


viel Mist in einer Textdatei
 
Hallo hab mal eine Frage zur Arbeit mit meiner Textdatei. Mchte einen Programmablauf dokumentieren und habe schon einige Fileformate in Delphi probiert. Womit ich zumindest Erfolg hab war das Filformat "file of string[255]" allerdings schreibt er mir dann ne Menge Mist, welcher noch in dem String ist (von mir aber nicht reingeschrieben wurde, sondern allte Daten) mit in meine Datei. Das fhrt zu folgendem Datei aussehen:

Zitat:

#Programm Start    @   |   l l  ?| S|    ϑ||  | 4@  NK :@ @  x .@ Q@ MK MK xzJ zJ @ i@ )#Prozedure VerzeichnisnameErzeugen Beginn6~  `{ t{   
 \ ` 9~06~*6~{7~ S    t{     -Y  7~`{ {   x G     H x PA '#Prozedure VerzeichnisnameErzeugen Ender طᅌ6 *|妴 gP ; r طᅌ6 *|妴 gP ; MK  |< ;MK  
 K*@  " K]
 MK /@  X@ p6  MK ^T@ K]
6#Prozedure Verzeichnis (Teil Treeview gendert) Beginn 9~06~*6~{7~ S    t{      -Y  7~`{ {   t G     H t PA 
  H ` vG ` G 8|J  ,#Prozedure VerzeichnisstrukturAnlegen Beginnichnis (Teil Treeview gendert) Beginn 9~06~*6~{7~ S    t{      -Y  7~`{ {   t G     H t PA 
  H ` '#Prozedure VerzeichnisseExistieren Endeeginnichnis (Teil Treeview gendert) Beginn 9~06~*6~{7~ S    t{      -Y  7~`{ {   t G    MK .@ 1R@ . $ X@  rJ MK ^T@ K]
4#Prozedure Verzeichnis (Teil Treeview gendert) Ende S    t{      -Y  7~`{ {   \ G     H \ PA 
  H ` vG ` G 8|J l M|J U|J K]
MK @ | #Programm Startendert) Ende S    t{      -Y  7~`{ {   \ G     H \ PA 
  H ` vG ` G 8|J l M|J U|J K]
MK @ | | rJ  rJ rJ #Programm Startendert) Ende S    t{      -Y  7~`{ {   \ G     H \ PA 
  H ` vG ` G 8|J l M|J U|J K]
MK @ | | rJ  rJ rJ )#V-Tisch1 antwortet nicht und ist offline|4  K]
MK  `  |Б|z|  | K]
   $ 0 <|A|$   lґ| |$  @ |  .@  .@ 1R@ 2 \U@ qU@  K]
MK  J #V-Tisch1 v=5000, a=5000t und ist offline|4  K]
MK  `  |Б|z|  | K]
   $ 0 <|A|$   lґ| |$  @ | * .@  .@ 1R@ " \U@ / qU@  K]
MK  ՍJ !#V-Tisch1Kalibrierung eingeleitet offline|4  K]
MK  `  |Б|z|  | K]
   $ 0 <|A|$   lґ| |$  @ |  .@  .@ 1R@ * \U@ qU@  K]
MK  J )#V-Tisch2 antwortet nicht und ist offline|4  K]
MK  `  |Б|z|  | K]
   $ 0 <|A|$   lґ| |$  @ |    .@ 1R@ .@ Q@ qU@  K]
MK  J #V-Tisch2 v=5000, a=5000t und ist offline|4  K]
MK  `  |Б|z|  | K]
   $ 0 <|A|$   lґ| |$  @ | * *  .@ 1R@ .@ Q@ qU@  K]
MK  ՍJ !#V-Tisch2Kalibrierung eingeleitet offline|4  K]
MK  `  |Б|z|  | K]
   $ 0 <|A|$   lґ| |$  @ |    .@ 1R@ .@ Q@ qU@  K]
MK  J )#Pi-Tisch antwortet nicht und ist offline| > > iK]
q      |@ |= |d > iK]
8  8  4 Fi 8 D 8  1P MK    RTSCTS K]
MK  #Initialisierung abgeschlossen 
wrde eigentlich gern das Format Textfile verwenden, nur leider wird da der Befehl seek nicht akzeptiert. Kann mir jemand nen Tip geben, wie ich eine ordentliche Textdatei erstellen kann ohne den ganzen Mll und wo auch jeder Zeileneintrag mit Writeln auch wirklich in eine neue Zeile geschrieben wird.

Vielen dank

BAMatze

mkinzler 7. Nov 2008 08:09

Re: viel Mist in einer Textdatei
 
Er scheint eine AnsiString-Datei als Unicode zu interpretieren

DeddyH 7. Nov 2008 08:11

Re: viel Mist in einer Textdatei
 
Wenn Du einen String[255] definierst, musst Du diesen auch vor dem Schreiben initialisieren (FillChar(Zu_schreibender_String,#0)). Ansonsten ist TextFile doch eigentlich das passende Format.

BAMatze 7. Nov 2008 08:18

Re: viel Mist in einer Textdatei
 
Was ich bei Textfile nicht verstehe, ist dass seek immer einen Fehler bringt, wenn die Datei in der ich springen mchte von diesem Typ ist. Fehlermeldung "inkompativle Typen".

DeddyH 7. Nov 2008 08:26

Re: viel Mist in einer Textdatei
 
Was mchstest Du mit Seek eigentlich erreichen?

The-X 7. Nov 2008 08:28

Re: viel Mist in einer Textdatei
 
In "Textfile"s darf nicht ge"seek"t werden, du kannst allerdings mit Append(txtfile); an das Ende der Datei springen um Zeilen anzufgen

Delphi-Quellcode:
const
  Filename = 'foo.txt';
var
  txt:Textfile;
begin
  AssignFile(txt, Filename);
  if FileExists(Filename) then
    Append(txt) // An's Ende der Datei "seek"en
  else
    Rewrite(txt); // Datei erstellen, falls nicht vorhanden

{....}
  Writeln(txtx, 'blaa');
{....}

  CloseFile(txt);
end;
der "Mist" Resultiert aus dem LngenByte des verwendeten ShortStrings (string[255]) und aus der Tatsache,
dass der String nur teilweise mit neuen Daten befllt wird, aber mit den vollen 255 Zeichen {+ Lngenbyte?} geschrieben wird

*Edit: AssignFile statt Assign {noch aus TP -Zeiten :mrgreen: }

guidok 7. Nov 2008 08:34

Re: viel Mist in einer Textdatei
 
Es ist mir noch nicht ganz klar, was du machen mchtest, aber vielleicht wre eine TStringList und deren Methode SaveToFile eine Alternative?

Medium 7. Nov 2008 08:39

Re: viel Mist in einer Textdatei
 
Bis zu einer gewissen Gre kann man zudem mit einer TStringList recht komfortabel arbeiten, nicht zuletzt wegen des indizierten Zugriffs auf einzelne Zeilen (was u.U. die Funktion von Seek ein Stck weit nachbilden kann). Ab ein paar MB an Text wrde ich dann aber dazu raten nicht mehr ganze Files in die Liste zu schlabbern. Der groe Vorteil: Speichern/Laden ist schon fertig eingebaut, und resultiert in "mllfreien" Textfiles ;)

NormanNG 7. Nov 2008 08:41

Re: viel Mist in einer Textdatei
 
Hi,

hier eine Funktion fr Seek mit TextFiles:

Delphi-Quellcode:
function TextSeek(var F : TextFile; Target : LongInt) : Boolean;
var Pos : LongInt;
begin
  with TTextRec(F) do begin
    Result := False;
    if Mode <> fmInput then Exit;
    Pos := FileSeek(Handle, 0, FILE_CURRENT);
    if Pos = -1 then Exit;
    Dec(Pos, BufEnd);
    Pos := Target-Pos;
    if (Pos >= 0) and (Pos < BufEnd) then
      BufPos := Pos
    else begin
      if FileSeek(Handle, Target, FILE_BEGIN) = -1 then Exit;
      BufEnd := 0;
      BufPos := 0;
    end;
  end;
  Result := True;
end;

BAMatze 7. Nov 2008 08:42

Re: viel Mist in einer Textdatei
 
Danke euch, das Append hat genau den Effekt gehabt, den ich erreichen wollte. Hier fr alle der dementsprechende Quellcode und das Ergebnis in der Datei:

Delphi-Quellcode:
Assign(fTempFile, ExtractFilePath(ParamStr(0))+ 'Temp\' + Speicherverzeichnis.sTempDatei);
if FileExists(ExtractFilePath(ParamStr(0))+ 'Temp\' + Speicherverzeichnis.sTempDatei) = true then Reset(fTempFile)
else Rewrite(fTempFile);
Append(fTempFile);
writeln(fTempFile,Text);

closeFile(fTempfile);
(ist nur kurzer Auszug aus der Procedure)

und hier die jetzt wesentlich ansehnliche Datei:

Zitat:

#Programm Start
#Prozedure VerzeichnisnameErzeugen Beginn
#Prozedure VerzeichnisnameErzeugen Ende
#Prozedure Verzeichnis (Teil Treeview gendert) Beginn
#Prozedure VerzeichnisstrukturAnlegen Beginn
#Prozedure VerzeichnisseExistieren Ende
#Prozedure Verzeichnis (Teil Treeview gendert) Ende
#Programm Start
#Programm Start
#V-Tisch1 antwortet nicht und ist offline
#V-Tisch1 v=5000, a=5000
#V-Tisch1Kalibrierung eingeleitet
#V-Tisch2 antwortet nicht und ist offline
#V-Tisch2 v=5000, a=5000
#V-Tisch2Kalibrierung eingeleitet
#Pi-Tisch antwortet nicht und ist offline
#Initialisierung abgeschlossen
#Prozedure Einstellungsanzeige Beginn
#Prozedure Einstellungsanzeige Ende
Danke an alle


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Seite 1 von 2  1 2      

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