Delphi-PRAXiS

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

Christian Seehase 13. Okt 2002 20:56

Moin Hansa,

was ich noch vergessen hatte (ist jetzt nicht auf Dich bezogen, sondern nur mal so allgemein erwähnt).
Nicht freigegebene Objekte sind in der Regel "ungefährlicher", da sie ja nach Programmende eh' meist vom OS weggeräumt werden, wenn der von einem Programm belegte Speicher wieder aufgeräumt wird.
Nicht freigegebene (Datei)Handles sind dann meist bis zum Neustart des Systems verloren.

Das fiel mir nur gerade ein, als Du von Semaphoren gesprochen hast.
Schmiert das Programm ab ist das bei denen ja auch nicht so tragisch. Hat man sich aber für Mutexe entschieden und das Programm schmiert ab, ohne den einen für einmaligen Start entscheidenden wieder freizugeben, kann das Programm bis zum Systemneustart nicht mehr gestartet werden.

Hansa 13. Okt 2002 21:47

Ah Ja,

Zitat:

Nicht freigegebene (Datei)Handles sind dann meist bis zum Neustart des Systems verloren.
Gut zu wissen.

Gruß
Hansa


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