![]() |
Wo ist Typ text ?
Hi Leute,
habe hier einen Text, den ich zeilenweise auswerten muß.
Code:
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.
VAR t : text;
zeile : string; begin assign (t,'TEST'); reset (t); WHILE not eof (t) DO BEGIN readln (t,zeile); // Zeile auswerten. END; end; 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] |
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: |
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] |
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 |
Hi Hansa,
genauso kann man das CloseFile() vergessen, wie du es nämlich auch tust... MfG, d3g |
Hi d3g,
hast ja Recht. :angle: Aber nur sofern AssignFile und Reset Speicher allokieren. :mrgreen: Gruß Hansa |
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. |
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: |
Moin Hansa,
dann mach' das mal in 'ner Schleife, unter 9x.... ;-) |
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 |
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. |
Ah Ja,
Zitat:
Gruß Hansa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr. |
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