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 seek in textdateien (https://www.delphipraxis.net/24147-seek-textdateien.html)

ltsavar 16. Jun 2004 10:21


seek in textdateien
 
Hallo,

ich möchte in einer Textdatei eine bestimme Stelle finden und dann an diese Stelle etwas einfügen. Nun ist die Datei ziemlich groß d.h. mehrere 1000 Zeichen und ein String kann ja maximal 255 Zeichen beherbergen. Hat jemand eine Idee wie ich das realisieren kann? Die Funktion seek kann ich da ja leider auch nicht verwenden um dann an diese Stelle zuspringen vielleicht :( hat jemand eine Idee?

Gruß

Ingo

ibp 16. Jun 2004 10:46

Re: seek in textdateien
 
herzlich willkommen :dp:

du kannst die datei im ganzen einlesen und dann durchsuchen lassen oder du liest die datei zeilenweise ein, fügst dann den string ein und speicherst die datei .. spricht doch nichts dagegen
schau mal nach tmemo oder trichedit

gruß rené

Niko 16. Jun 2004 10:48

Re: seek in textdateien
 
Hallo,

Klick

ibp 16. Jun 2004 11:00

Re: seek in textdateien
 
also wie groß denn nun wirklich, mehrere 1000 zeichen muß nicht groß sein kann aber...

ltsavar 16. Jun 2004 11:14

Re: seek in textdateien
 
Hi erstmal danke für die antworten,

Zitat:

Zitat von ibp
also wie groß denn nun wirklich, mehrere 1000 zeichen muß nicht groß sein kann aber...

also so groß ist sie nicht 100kb, aber enthält halt ziemlich viele zeichen :/


Zitat:

Zitat von ibp

du kannst die datei im ganzen einlesen und dann durchsuchen lassen oder du liest die datei zeilenweise ein, fügst dann den string ein und speicherst die datei .. spricht doch nichts dagegen
schau mal nach tmemo oder trichedit

gruß rené

zeilenweise einlesen geht nicht. das ist nur eine zeile ohne carriage return. und wenn ich das nur in nen string einlese hab ich ja das problem mit den 255 Zeichen...
aber ok tmemo hab ich mir noch nicht angeguckt...

ich hatte das halt so probiert:
assignfile(f,Edit1.text);
reset(f);
read(f,readst);
.
.
.

und das geht ja so nicht...

Gruß Ingo

shmia 16. Jun 2004 11:59

Re: seek in textdateien
 
Zitat:

Zitat von ltsavar
ich möchte in einer Textdatei eine bestimme Stelle finden und dann an diese Stelle etwas einfügen.

Um es mal ganz klar zu sagen:
Man kann in Dateien nicht in der Mitte oder am Anfang Daten Einfügen!
Man kann nur:
  • die Datei komplett in den Speicher einlesen (z.B. mit TStrings), Daten einfügen und speichern (dabei wird die orginale Datei überschrieben)
    Sehr einfach zu programmieren
  • Datei ab der Einfügestelle bis Dateiende in RAM einlesen, einzufügende Daten schreiben, gespeicherte Daten aus RAM schreiben
  • Datei bis zu Einfügestelle lesen und in Datei B kopieren, Datei B mit einzufügende Daten beschreiben und Rest von Datei A nach Datei B anhängen. Anschliesend Datei A löschen, Datei B nach Datei A umbenennen
    Braucht (fast) keinen Speicher, aber langsam

ltsavar 16. Jun 2004 12:16

Re: seek in textdateien
 
Zitat:

Zitat von shmia
Zitat:

Zitat von ltsavar
ich möchte in einer Textdatei eine bestimme Stelle finden und dann an diese Stelle etwas einfügen.

Um es mal ganz klar zu sagen:
Man kann in Dateien nicht in der Mitte oder am Anfang Daten Einfügen!
Man kann nur:
  • die Datei komplett in den Speicher einlesen (z.B. mit TStrings), Daten einfügen und speichern (dabei wird die orginale Datei überschrieben)

Hallo shmia,

wenn du mir jetzt nur noch kurz sagst wie so ein Einlesen mit TStrings funktioniert wäre ich glücklich ...

Gruß Ingo

Spezi1980 16. Jun 2004 13:22

Re: seek in textdateien
 
Zitat:

zeilenweise einlesen geht nicht. das ist nur eine zeile ohne carriage return. und wenn ich das nur in nen string einlese hab ich ja das problem mit den 255 Zeichen...
aber ok tmemo hab ich mir noch nicht angeguckt...
Wieso Strings und 255 Zeichen?

Under Pascalzeiten war ein String auf 155 Zeichen beschränkt. In Delphi gibt es unter anderem den Datentyp Shortstring (der ist max 255 Zeichen groß) und den Datentyp AnsiString (der bis 2Gb groß sein kann).

Der Typ String ist dann je nach gesetztem Compilerschalter {$H+}/{$H-} ein Shortstring oder ein Ansistring.

Du kannst also problemlos alles in einen String einlesen und durchforsten.

TStrings ist eine art dynamisches Stringarray, in dem mehrere Strings gespeichert werden und für deinen fall eher weniger zu gebrauchen, da hier beim laden auch das carriage return auswertet wird.

Gruß Robert

ibp 16. Jun 2004 13:24

Re: seek in textdateien
 
versuchs mal damit...
Delphi-Quellcode:
Memo1.LoadFromFile(DateiName)
und übrigens gibt es hier eine tolle suche...

:-D

shmia 16. Jun 2004 13:26

Re: seek in textdateien
 
Zitat:

Zitat von ltsavar
wenn du mir jetzt nur noch kurz sagst wie so ein Einlesen mit TStrings funktioniert wäre ich glücklich ...

Nicht leichter als das: :mrgreen:
Delphi-Quellcode:
var
   liste : TStrings;
begin
   liste := TStringList.Create;
   try
      // Daten laden
      liste.LoadFromFile('lottozahlen.txt');
      if liste.Count >= 10 then
      begin
         // füge folgene Zeile an Zeilennummer 10 ein
         liste.Insert(10, '5 18 27 31 31 49');
         // ändere eine bestehende Zeile
         liste.Strings[9] := '*** '+liste.Strings[9] + ' // nur ein Kommentar';
         
      end;

      // lösche die ersten beiden Zeilen
      liste.Delete(0);
      liste.Delete(0);


      // speichern
      liste.LoadFromFile('lottozahlen.txt');
   finally
      liste.Free; // aufräumen
   end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz