Entwickler-Ecke

Dateizugriff - Einzelne Zeilen in Textdatei bearbeiten?


der_zaehe - Sa 11.06.05 15:50
Titel: Einzelne Zeilen in Textdatei bearbeiten?
jaa, hallo erstmal ...
gibt es eigentlich eine möglichkeit, mit einem textfile ganz bestimmte zeilen in einer datei zu suchen und diese zu überschreiben, zu ändern, zu löschen, ohne die ganz datei neu schreiben zu müssen?

danke schonmal im voraus.
mfg der_zaehe


Narses - Sa 11.06.05 15:55

Moin!

Wenn du die Anzahl der Zeichen nicht verändern willst, kannste doch einfach die Bytes austauschen.

Ansonsten führt kein Weg am Neuschreiben vorbei.

cu
Narses


retnyg - Sa 11.06.05 16:45

guck dir mal den befehl seek an


der_zaehe - Sa 11.06.05 18:25

seek war auch mein erster gedanke, hab dann aber leider feststellen müssen, das der nur bei untypisierten dateien funktioniert, nicht bei textdateien.


alias5000 - Sa 11.06.05 18:36

Also wenn du die Textfile per AssignFile und ReadLn in eine TStringList einließt kannst du damit machen was du willst :!:


retnyg - Sa 11.06.05 18:50

user profile iconalias5000 hat folgendes geschrieben:
Also wenn du die Textfile per AssignFile und ReadLn in eine TStringList einließt kannst du damit machen was du willst :!:

das ginge auch einfacher mit stringlist.loadfromfile - nur was soll das bringen ?

@der_zaehe: du kannst ja nen file of char verwenden, musst dann halt immer ein zeichen lesen bis zum #13#10
-> neue zeile


Heiko - Sa 11.06.05 18:54

Warum besteht eigentlich überhaupt der Zeilenumbruch aus 2 Bytes (also #13 und #10)? Würde nicht einer reichen?


alias5000 - Sa 11.06.05 18:59

@retnyg: Das ist so ein Problem bei manchen Textfiles, dass kein Zeilenabschlusszeichen (#13) gesetzt wird. Kommt zwar selten vor, war aber nur die sicherste Variante. Ist dieses Zeichen nicht vorhanden, klappts mit LoadfromFile halt net.


retnyg - Sa 11.06.05 19:00

#13 ist das CR - carriage return
#10 das LF - line feed
ist halt seit DOS-zeiten so üblich


retnyg - Sa 11.06.05 19:03

user profile iconalias5000 hat folgendes geschrieben:
@retnyg: Das ist so ein Problem bei manchen Textfiles, dass kein Zeilenabschlusszeichen (#13) gesetzt wird. Kommt zwar selten vor, war aber nur die sicherste Variante. Ist dieses Zeichen nicht vorhanden, klappts mit LoadfromFile halt net.

also afaik liest readln auch immer bis zum #13#10, bzw zum eof bei der letzten zeile
dass textdateien kein #13 zum zeilenabschluss verwenden, habe ich bislang noch nie gesehen ^^


der_zaehe - Sa 11.06.05 19:06

user profile iconalias5000 hat folgendes geschrieben:
Also wenn du die Textfile per AssignFile und ReadLn in eine TStringList einließt kannst du damit machen was du willst :!:


schon klar, ne? jedoch wollte ich gerade das vermeiden. der hintergrund bei der ganzen sache ist, das ich einen server für ein chat schreibe, der eine mischung aus icq und irc ist, d.h. jeder angemeldete benutzer hat eine benutzerliste. ich probiere das ganze so zu optimieren, das mehrere drölftausend benutzer gelichzeitig an einem server hängen können, ohne das der verreckt.
ist zwar utopisch, das sich da wirklich so viele anmelden, mir geht es jedoch mehr um die theorie als um den praktischen nutzen.
die datei erst mal in den arbeitsspeicher zu laden, bedeutet unnötig verbrauchte kapazitäten. deshalb will ich das nach möglichkeit vermeiden.


retnyg - Sa 11.06.05 19:11

ich weiss nicht wofür du da ne textdatei benötigst, aber prinzipiell könntest du auch ein MMF (memory mapped file) verwenden
http://www.delphi-forum.de/viewtopic.php?t=20679&highlight=semaphore