AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prozeduren und Funktionen für Textdateien
Thema durchsuchen
Ansicht
Themen-Optionen

Prozeduren und Funktionen für Textdateien

Ein Thema von asusbob · begonnen am 28. Jan 2008 · letzter Beitrag vom 28. Jan 2008
Antwort Antwort
asusbob

Registriert seit: 23. Apr 2006
46 Beiträge
 
#1

Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 01:23
Nabend all =)...

Ich bin gerade am Lernen für meine morgige Programmiersprachen 2 Klausur ^^ und ich wollte mir noch einmal die Dateioperationen anschauen und jetzt werd ich aus dem Skript unseres Prof. Dr. nich mehr schlau, und zwar weiß ich nicht was

SeekEoln {gehe ich damit jetzt zur nächsten variablen die durch whitespaces von der letzten getrennt war, oder direkt zum ende der zeile?}
und
SeekEof {gehe ich gleich zum ende der datei oder auch wieder zur nächsten variablen?}
machen und ich sehe nicht den nutzen von
SetTextBuffer
und
Flush

wäre schön, wenn es mir jmd eben erklären könnte, ich blick es grad einfach nicht (kann auch mit der Uhrzeit zusammenhängen).

Greetz
Till
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 01:36
Hast du dir die OH mal angesehn?
Da steht eigentlich alles ganz genau drin.

Zitat von OH:
z.B.
Delphi-Syntax:
function SeekEoln [ (var F: Text) ]: Boolean;

Beschreibung
In Delphi können Sie mit SeekEoln ermitteln, ob sich zwischen dem Dateizeiger und dem Ende der aktuellen Zeile nur Leerräume befinden. SeekEoln bewegt den Dateizeiger hinter alle Leerräume an das Ende der Zeile, an ds Ende der Datei oder auf das nächste Zeichen, das kein Leerraum ist. Wenn der Dateizeiger an das Zeilenende oder das Dateiende gesetzt werden konnte, gibt SeekEoln true zurück. Andernfalls wird false zurückgegeben.
SetTextBuffer ist zwar nicht in meinem D7 hier enthalten, aber meine Vermutung:
Dieses setzt einen neuen/eigenen Textpuffer (Zwischenspeicher) die "alten" Textfunktionen werden über einen interen Puffer umgeleitet, also Schreib/Lesezugriffe gehen nicht direkt an die Festplatte.
Intern wird von nur ein 128 Byte Textpuffer eingerichtet (nicht grad ein optimaler Wert) und mit dieser Funktion kann man bestimmt einen eigenen Puffer anzugeben (jedenfalls ist es Delphiseitig zumindestens möglich einen Eigenen zu verwenden) ... z.B. mit einer anderen Größe.

Flush leert diesen Puffer.
also es sort z.B. bei Schreibzugriffen dafür, daß die "geschriebenen" Strings/Texte tatsächlich in die Datei eingetragen werden und nicht nur im Puffer rumliegen.
Delphi-Quellcode:
Rewrite(F, 'Test.txt');
WriteLn(F, 'Test');
// hier ligt der String "Test" nur im Puffer, also die Datei ist noch 0 Byte groß
Flush(S); {oder CloseFile(F);
oder weitere WriteLn(und Co.), welche größer als der Puffer sind}

// jetzt steht "Test" erst in der Datei ... also Datei ist größer als 0 Byte


Aber die anderen Funktionen sind definitiv ausreichend beschrieben.
$2B or not $2B
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 01:39
Ich denke wenn man die ersten beiden ausschreibt, dann wird das schon klar...

Seek End Of Line (seekeoln)
Seek End Of File (seekeof)

Und Flush sorgt dafür, dass der Dateipuffer auf den Datenträger übertragen werden. Wenn du was schreibst wird das nicht sofort auf den Datenträger gespeichert, sondern erst wenn eine gewisse Menge an Änderungen angefallen ist. Dieser Puffer beschleunigt somit den Datenzugriff, etc. Und Flush sagt nun: schreib alle Änderungen nun erstmal in die Datei bitte.
  Mit Zitat antworten Zitat
asusbob

Registriert seit: 23. Apr 2006
46 Beiträge
 
#4

Re: Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 01:44
Heißt ja auch SetTextBuf - mein fehler ^^...

Ja, geguckt hab ich - ich hab nur ganz gepflegt die Description überlesen ^^... aber vielen dank das hilft mir schon mal sehr weiter =)

Naja, um 1Uhr 42 ist mir das nicht mehr so klar aber vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 01:47
[ot]
Zitat von Muetze1:
Dieser Puffer beschleunigt somit den Datenzugriff, etc.
das war mal so geplant (und war zu Pascal/DOS-Zeiten auch in Ordnung so), aber inzwischen hat Windows eine "optimiertere" Dateiverwaltung, womit dieses Verhalten eher nachteilig wirkt.

aber im Prinzip stimmt Muetze's Aussage
[/ot]


[edit]
OK, SetTextBuf kennt meine OH und wenn ich mir dieses durchles ... lieg ich ja ziemlich richtig

[edit=MrSpock]add - Tag Turch edit - tag ersetzt (wegen Formatierungsproblem). Mfg, MrSpock[/edit]
$2B or not $2B
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 01:51
Zitat von himitsu:
[ot]
Zitat von Muetze1:
Dieser Puffer beschleunigt somit den Datenzugriff, etc.
das war mal so geplant (und war zu Pascal/DOS-Zeiten auch in Ordnung so), aber inzwischen hat Windows eine "optimiertere" Dateiverwaltung, womit dieses Verhalten eher nachteilig wirkt.

aber im Prinzip stimmt Muetze's Aussage
[/ot]
Ich habe nicht geschrieben das es noch so ist. Heutzutage ist es eher eine NOPe Funktion, aber egal. Windows bietet auch immernoch FlushBuffers() an und darauf wird es wohl auch umgesetzt sein. Und somit ist das beschriebene Verhalten immernoch da, nur halt verschoben in die WinAPI.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Prozeduren und Funktionen für Textdateien

  Alt 28. Jan 2008, 02:03
Zitat von Muetze1:
Windows bietet auch immernoch FlushBuffers() an und darauf wird es wohl auch umgesetzt sein.
Also in D7 ist es noch leider nicht so (kann mir aber nicht vorstellen, daß Borland noch irgendwas an diesen uralten Funktionen geändert hat ... kann aber daheim gern nochma nachsehn)

Es wird nur der Textpuffer per WriteFile in die Datei geschrieben und der Puffer geleert.
und da die Dateien mit aktiver Windowspufferung geöffnet sind, ist somit zwar der Text zumindestens an Windows übergeben, aber nicht mit Sicherheit auf der Platte (wenn man z.B. die Pufferung in der Festplatte ignoriert)

Flush ruft TextRect(F).InOutFunc auf, welches bei Rewrite mit System.TextOut verknüpft ist und dieses macht kein FlushBuffers.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 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