Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wo ist Typ text ? (https://www.delphipraxis.net/1057-wo-ist-typ-text.html)

Hansa 13. Okt 2002 10:43


Wo ist Typ text ?
 
Hi Leute,

habe hier einen Text, den ich zeilenweise auswerten muß.

Code:
VAR t : text;
    zeile : string;
begin
  assign (t,'TEST');
  reset (t);
  WHILE not eof (t) DO BEGIN
    readln (t,zeile);
// Zeile auswerten.
  END;
end;
Ist nicht viel, geht so aber nicht. Delphi kennt den Typ text nur bei Konsolenanw. Nun brauche ich weder eine Listbox, noch sonstwas auf dem Bildschirm, höchstens einen Zähler, dafür aber DB-Komponenten.

Soll ich da jetzt eine Konsolenanwendung draus machen oder was bietet sich als einfacher Ersatz an?

Gruß
Hansa

[edit]Doppelpost gelöscht; by Daniel B.[/edit]

Daniel B 13. Okt 2002 10:48

Hallo Hansa,

das nennt sich TextFile und funktioniert schon noch.
Die Var nicht als Text deklarieren, sondern als TextFile.
Siehe auch OH --> TextFile.

Grüsse, Daniel :hi:

Daniel 13. Okt 2002 10:52

Mal abgesehen davon, dass sich der Code bei mir unter Delphi 6 durchaus kompilieren lässt, könntest Du auch einfach eine StringListe nehmen:
Code:
[b]Procedure[/b] Foo;
[b]var[/b] Index : Integer;
     data : TStringList;
[b]begin[/b]

  data:= TStringList.Create;
  [b]TRY[/b]
    data.LoadFromFile( 'TEST' );
    [b]For[/b] Index:= 0 [b]To[/b] data.Count-1 [b]Do[/b]
    [b]Begin[/b]
      [color=#000080]// data[Index] auswerten[/color]
    [b]End[/b];
  [b]FINALLY[/b]
    data.Free;
  [b]END[/b];
 
[b]end[/b]

Hansa 13. Okt 2002 11:11

Danke an beide Daniels !

Verstehe zwar immer noch nicht, worin die Notwendigkeit bestanden hat, an den Standard-Pascal Sachen rumzufummeln, aber es geht einfach so :

text --> textfile
assign --> AssignFile

Ja, die Stringliste wäre eigentlich auch zu gebrauchen, aber wenn man mal das free vergißt ? :mrgreen: Deshalb : TextFile.

Gruß
Hansa

d3g 13. Okt 2002 11:27

Hi Hansa,

genauso kann man das CloseFile() vergessen, wie du es nämlich auch tust...

MfG,
d3g

Hansa 13. Okt 2002 11:37

Hi d3g,

hast ja Recht. :angle: Aber nur sofern AssignFile und Reset Speicher allokieren. :mrgreen:

Gruß
Hansa

Christian Seehase 13. Okt 2002 11:43

Moin Hansa,

AssignFile ist nicht das Problem. Das braucht Pascal nur für interne Zwecke.
Bei Reset/Rewrite wird intern dann die API CreateFile aufgerufen, und dadurch ein Dateihandle belegt, dass über CloseFile wieder freigegeben werden muss.

Hansa 13. Okt 2002 16:33

Hi,

stimmt alles, ist aber Haarspalterei. Bei einem vergessenen close ist ein FileHandle verbraucht, schön und gut. Bei vergessenem free der dafür angeforderte Speicherplatz, was mehr ist, als nur der Dateiname. :bouncing4: :bounce1: Das Thema bietet sich aber dafür an, eine Nanosekunde an Rechenzeit zu gewinnen.

Gruß
Hansa :mrgreen:

Christian Seehase 13. Okt 2002 18:20

Moin Hansa,

dann mach' das mal in 'ner Schleife, unter 9x.... ;-)

Hansa 13. Okt 2002 18:44

Hallo Christian,

hehehe :mrgreen: , einwandfrei, habe zu spät gesehen, daß ich das nicht dabeigeschrieben habe. Vielleicht hast Du ja meine Frage gesehen, wie man verhindert, daß ein Programm aus Versehen mehrfach gestartet wird. Deshalb habe ich letztendlich Semaphoren eingebaut. Durch solche Sachen passieren dann die Effekte mit File-Handles usw. Gewesen wars natürlich keiner. :angle: Das ist immer köstlich, so etwas herauszufinden und jemandem zu erklären, der es sowieso nicht versteht und es wieder so macht, sobald man zur Tür raus ist.

Gruß
Hansa


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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