![]() |
Textzeile in Txt auslesen
Wie lese ich in einer Txt Datei eine ganz bestimmte Zeile aus, zB. Zeile 576 :?:
|
Re: Textzeile in Txt auslesen
Du machst 576 mal ein readln. Dann hast du die Zeile. Andere Möglichkeit wär seek, aber ich bin nicht sicher ob das auch bei .txt geht.
|
Re: Textzeile in Txt auslesen
ganz einfach so:
Delphi-Quellcode:
dann hast du zeile 576 in der variable "zeile" ;)
var sl: TStringList;
zeile: string; begin sl := TStringList.Create; sl.loadfromfile('diedatei.txt'); zeile := sl[576]; sl.free; end; Aenogym |
Re: Textzeile in Txt auslesen
In einer Schleife, ist das nicht ein bisschen umständlich?
|
Re: Textzeile in Txt auslesen
Die obere Antwort bezieht sich auf das vorherige. Mein Browser hat es nicht so schnell aktualiesiert.
Gute Idee. Danke. |
Re: Textzeile in Txt auslesen
Is schon recht umständlich. Die Methode von Aenogym ist da viel besser.
Tipp: Du kannst deinen Beitrag auch editieren und musst nicht immer einen neuen Beitrag schreiben. |
Re: Textzeile in Txt auslesen
Also, bei mir compiliert er zwar fehlerfrei, aber beim Auwsführen bringt er einen Fehler.
Ich habe mal alles unwichtige aus meiner Procedure gestrichen und es hier dargestellt. Erkennt vielleicht jemand was daran falsch ist???
Delphi-Quellcode:
:?:
procedure TForm1.Button3Click(Sender: TObject);
var sl: TStringList; f:textfile; begin assignfile(f, 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt'); rewrite(f); write(f, '2'); while j < aerg do begin sl.loadfromfile('E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt'); primzahl:=strtoint64(sl[j]); sl.free; end; closefile(f); end; |
Re: Textzeile in Txt auslesen
Ich hab hier im Moment kein Delphi, und weiß eben nicht ob LoadFromFile mit einer geöffneten Datei zurechtkommt. Muss die Datei denn unbedingt in der ganzen Prozedur geöffnet sein?
Greetz alcaeus |
Re: Textzeile in Txt auslesen
Ja gut, ich habs jetzt umgestellt, klappt aber trotzdem noch nicht. Der Computer hat nun einen seiner anderen Fehler ausgespuckt beim ausführen.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var sl: TStringList; f:textfile; begin assignfile(f, 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt'); rewrite(f); write(f, '2'); closefile(f); sl := TStringList.Create; while j < aerg do begin sl.loadfromfile('E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt'); primzahl:=strtoint64(sl[j]); sl.free; end; end; |
Re: Textzeile in Txt auslesen
Hallo Alexander Roth,
habe mal deinen Code kommentiert. Ich denke Du siehst selber was falsch ist. Ferner würde die Stringliste auch mit einem Fehler versagen. Du wirbelst da mit j und aerg rum, aber was ist wenn deine Liste nur einen String enthält und deine Variablenwerte oberhalb von 0 liegen? Zitat:
Claus |
Re: Textzeile in Txt auslesen
Ja, könnte sein dass mit den Variablenwerten mein Fehler liegt. Ich probier mal weiter.
Was macht reset? Ich hab gelesen es würde eine Datei öffnen. Frage: Was öffnet denn eine Datei damit man im Quellcode reinschreiben kann??? |
Re: Textzeile in Txt auslesen
Zitat:
auch würde es reichen wenn du die Datei nur einmal ladest und nicht in jedem Durchgang. Würde es so vorschlagen
Delphi-Quellcode:
Irgendwas mußt Du mit diesem j schon noch machen, sonst hast Du eine Endlosschleife
procedure TForm1.Button3Click(Sender: TObject);
const CFileName = 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt'; var sl: TStringList; f:textfile; j,aerg: integer; begin j:=0; assignfile(f, CFileName); rewrite(f); write(f, '2'); closefile(f); sl := TStringList.Create; try sl.loadfromfile(CFileName); while ((j < aerg) and (j < sl.count)) do begin primzahl:=strtoint64(sl[j]); j := <...> end; finally sl.free; end; end; |
Re: Textzeile in Txt auslesen
nebenbei hast du da eine nette Endlosschleife, da du werder j noch aerg veränderst... ich nehme an, du willst j jedesmal um eins erhöhen? das geht am Besten mit inc(j) oder du machst eine for-Schleife...
|
Re: Textzeile in Txt auslesen
Zitat:
Das habe ich vorher eh auch schon dazugeschrieben und durch das j:= <...> angedeutet. Ein weiteres Problem besteht sicher durch die fehlende Initialisierung von aerg... |
Re: Textzeile in Txt auslesen
Das ist alles nicht das Problem. Das habe ich alles im hier aufgefürten Code weggelassen,(hab ich geschrieben) da es die übersichtlichkeit erhöht. Wenn es euch interessiert: Ich habe auch noch eine Schleife über diese gestülpt, in der allerdings nichts relevantes passiert. Es ist weder eine nicht deklarierte Variable (was der Compiler zweifelslos gemeldet hätte), noch ist es eine Endlosschleife oder ähnliches.
|
Re: Textzeile in Txt auslesen
Naja vermutlich ist es genau diese Schleife...
|
Re: Textzeile in Txt auslesen
Obwohl dein Code schon korrigiert wurde:
Zitat:
|
Re: Textzeile in Txt auslesen
Ich wäre überhaupt dafür mal die ganze Methode zu sehen und nicht nur die angeblich relevanten Teile. Wenns wirklich lang ist vielleicht als Anhang. Wird sonst ja doch nur ein Raten im Nebel. Man weiß ja auch nicht wo diese Schleife die über dem gesamten Code sein soll angeordnet ist...
|
Re: Textzeile in Txt auslesen
Der code:
Code:
Erklärungen: edit7 ist der Enwert
procedure TForm1.Button3Click(Sender: TObject);
const Pfad = 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt'; var i,j,k : int64; primzahl:int64; sl: TStringList; f:textfile; begin assignfile(f,Pfad); rewrite(f); write(f, '2'); closefile(f); zeit := time; sl := TStringList.Create; memo1.Clear; abbruch := false; aerg := 1; j:=0; nochr :=false; if strtoint64(edit7.Text)<2 then exit else i:=3; while i<strtoint64(edit7.Text)do begin try while (j < aerg)and(j< sl.count) do begin sl.loadfromfile(pfad); primzahl:=strtoint64(sl[j]); if i mod primzahl > 0 then nochr:= true//primzahl noch ja else //keine Primzahl begin nochr:= false; j:= aerg; end; inc(j); end; finally sl.free; end; //für das array und fürs weiterkommen und für die txt if (nochr=true)then begin inc(aerg); reset(f); writeln(i); closefile(f); end; statusbar1.Panels[4].Text:= 'Benötigte Zeit: ' + timetostr(time-zeit); // statusbar1.Panels[3].Text:= 'Dargest. Ergebnisse: '+inttostr(aserg); statusbar1.Panels[2].Text:= 'Ergebnisse: '+inttostr(aerg); statusbar1.Panels[1].Text:= 'Zahl: ' +inttostr(i); statusbar1.Panels[5].Text:= Format('%f', [aerg/i*100])+'% Erg.'; application.ProcessMessages; if abbruch = true then begin statusbar1.Panels[5].Text:= Format('%f', [aerg/i*100])+'% Erg.'; j:=aerg+1; i:=strtoint64(edit7.Text)+1; end; i:=i+2; j := 0; end; end; manche Variablen habe ich nicht als lokale Variable sondern als übergeordnete. Zitat:
Zur Zeit gibt er diesen reizenden Fehler aus: (Wie bind ich denn hier Bilder ein, anscheinend granicht): "Im Projekt mathematik.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Medlung: 'Zugriffsverletztung bei adresse 00000000. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzten." Zitat:
|
Re: Textzeile in Txt auslesen
ganz klar du gibst Deine ausserhalb der Schleife erzeugten TStringList frei, damit ist das Object zerstört und beim neuerlichen zugriff darauf hast Du eine AccessViolation was nicht anders zu erwarten ist.
Gib die Liste erst am Ende deiner Procedure ausserhalb der Schleifen frei. Um sie zu leeren kannst Du die Methode Clear der StringListe verwenden. |
Re: Textzeile in Txt auslesen
Daaaaaaaaaaaaaaanke. Klappt zwar noch nicht alles wie ich es mir wünsche, doch der Fehler ist weg. Nochmals danke.
Ich werde mal weiter rumbasteln um das besch.... Wetter zu vergessen. :hello: |
Re: Textzeile in Txt auslesen
Frage: Wie viel kann denn so eine Stringlist aufnehmen? Doch hoffentlich wesentlich mehr als ein Array?!!!
|
Re: Textzeile in Txt auslesen
Das weiß ich nicht genau, denke aber nicht dass es mehr eher weniger ist. Das Array selber ist doch nur durch den vorhandenen Speicher begrenzt, während bei der StringList auch noch die anderen Felder mitberücksichtigt werden müssen.
|
Re: Textzeile in Txt auslesen
Schade. Dann bringt mir dass mit der String-List ziehmlich wenig. Auserdem dauert der Process in der txt ja ewig.
Kennt nicht jemand ein schnelles Verfahren um die große Menge von primzahlen schnell und einfach zu speichern und wieder auslesen zu können??? Ein Array ist zu klein. Ooo.. Ich eröffne leiber mal ein neues Thema.. oder??? passt ja irgendwie nicht mehr ganz so zu dem Titel hier. |
Re: Textzeile in Txt auslesen
Zitat:
Delphi-Quellcode:
Du lädst die GESAMTE Datei bei jedem Durchgang der Schleife neu, was unnötigt Zeit raubt. Dreh das ganze mal um:
while (j < aerg)and(j< sl.count) do
begin sl.loadfromfile(pfad);
Delphi-Quellcode:
sl.loadfromfile(pfad);
while (j < aerg)and(j< sl.count) do begin |
Re: Textzeile in Txt auslesen
Ohoooo. Klar. Bin ich blöd und überseh so was offensichtliches.
Danke. Wenn ich den beitrag von Toxman Zitat:
|
Re: Textzeile in Txt auslesen
Nun irgendwann wird Dein File ja auch mal zuende sein....
|
Re: Textzeile in Txt auslesen
Ohhh :hello: :hello: :hello: Danke Leute, Danke an euch alle!!!!
Ich bastle noch ein paar Feinheiten aus. Doch das Hauptgerüst steht. Ich stelle mein Progrämmchen dann später vielleicht mal in den Freewarebereich, wenn es fertig ist. Als ich mit dem Programm angefangen habe wusste ich garnichts über Dateien auslesen und schreiben. Tschau Alexander |
Re: Textzeile in Txt auslesen
:arrow: Kannst du bitte einmal den gesamten Sourcecode postemn
Noch besser: Häng einfach einmal die .Pas an. Dann kann ich mir das vielleicht mal anschauen. Ups: Das waren ja zwei Seiten :oops: Entschuldigt bitte |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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