Textdatei öffnen,strings suchen und ändern

Binio

Erfahrenes Mitglied
Hallo ich bin ziehmlicher Delphi 7 neuling.
Habe folgendes Vor.
Möchte eine test.txt öffnen und dort nach Strings suchen.

bsp:
i v=1
oder
x 1.6 Linker Innenrand:
oder
i A=0
oder
x 1.7 Rechter Innenrand:
oder
i R=0
...

möchte dann denn z.b. x 1.6 Linker Innenrand: fehlt diesen einfügen.
Dachte da an If abfragen.
if (aktuelle Zeile != "x 1.6 Linker Innenrand:")
{
"enter einfügen" und dann "x 1.6 Linker Innenrand: einfügen"
}

ein anderes Programm liest die test.txt aus und nutze die darin enthaltenen Informationen um damit zu arbeiten. Ich habe ca 70 Zeilen die befehle/Informationen enthalten.
Wenn z.B. eine Zeile fehlt bekommt das andere Programm ein Error.
Daher muss ich dafür sorgen das alles Zeilen da sind und wenn diese nicht vorhanden sind mit ein standart wert füllen und abspeichern.
Kann mir da bitte einer helfen ?
danke im vorraus

Mfg
Robert
 
Verwende doch einfach eine Memo-Komponente.
Code:
 Mit bspw.
 Memo1.Lines.LoadFromFile( Dateiname) 
 kann man eine Textdatei öffnen.
 
 Auf die einzelnen Zeilen kannst Du über in einer Schleife
 for i:= 0 to Memo1.Lines.Count-1 dobegin
   Machwasmit( Memo1.Lines[i] );
 end;


zugreifen.

Hoffe das hilft schon mal

vop
 
mit
Code:
 if pos(soll[zeilennrsoll], ist.Text)=0 then begin ...
kann ich die einzelnen Zeilen vergleichen ob im "soll Text" die Zeilen im "ist text" sind.
wenn aber in ist text.

"wohnort = werl"

steht und im soll text

"wohnort = standart"

sagt pos das er den "wohnort = standart" im ist text nicht finden kann weil er ja ganze Zeile untersucht und nicht nur das erste Wort.
Eigentlich sollte der bei diesen Beispiel nichts machen.
Mein Quell text jedoch fügt eine neue Zeile ein mit "Wohnort = standart".
Habe dann im "ist text"

"wohnort = werl"
"wohnort = standart"

stehen. Also ein doppelten eintrag.
GIbt es eine function die nur das erste Wort in einer Zeile einliest?
oder die ersten 2 Wörter, etc ?


Quelltext:
Code:
 procedure TForm1.Button2Click(Sender: TObject);
var soll: TStringList;
var ist: TStringList;
var zeilenfehlen: Array[1..1000] of integer;
var zeilennrsoll: integer;
var zeilennrist: integer;
var richtig: integer;
begin
soll:=TStringList.Create; //Objekt erzeugen
ist:=TStringList.Create; //Objekt erzeugen
richtig:=0;
	try
	 soll.LoadFromFile('C:\soll.hbs'); //Datei in Stringliste laden
	 ist.LoadFromFile('C:\ist.hbs'); //Datei in Stringliste laden
	 for zeilennrsoll:=0 to soll.Count-1 do begin //Schleife über alle Zeilen, Zählung
												 //beginnt mit 0, die Eigenschaft Count
												 //enthält die Gesamtzahl der Zeilen
		 if pos(soll[zeilennrsoll], ist.Text)=0 then begin
			ShowMessage('Zeile '+IntToStr(zeilennrsoll+1)+' wurde nicht gefunden');
			ist.Insert(zeilennrsoll,soll[zeilennrsoll]);
			ist.SaveToFile('C:\ist.hbs');
		 end
	 end;
	finally
soll.free; //Objekt wieder freigeben
end;
end;
 
Wenn Du StringListen verwendest, kannst du auch mit den Namen/Werte-Paaren arbeiten

ist.IndexOfName('wohnort')

liefert dir den Index der Zeile in der Stringliste, die mit wohnort=... beginnt

ist.ValueFromIndex( index )
liefert Dir dazu den Wert zu dieser Zeile,
also in deinem bsp. 'stanard'
alles klar?

vop
 
Hallo,
ist das Programm, welche die Werte aus xx.txt verwendet schon fertig? Wenn nicht, solltest du dir ev. auch TIniFile in der Delphihilfe ansehen. Diese Komponente unterstützt genau das, was du brauchst.
 
Zurück