Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   .txt lesen/schreiben (https://www.delphipraxis.net/110113-txt-lesen-schreiben.html)

shader 13. Mär 2008 07:37


.txt lesen/schreiben
 
Schönen guten Morgen.
Ich möchte mir einen Notiz Programm schreiben. Das schreiben klappt
auch. Also wenn ich einen Text eingegeben habe, und auf eintragen klicke soll
der Text in die Datei reingeschrieben werden. Wenn ich dann neuen Text
eingeben, soll der auch in die .txt Datei geschrieben werden und
nicht den alten Text löschen. Hat da jemand ein Lösungsansatz für mich!?
*thx*

bitsetter 13. Mär 2008 07:46

Re: .txt lesen/schreiben
 
Hi,

nimm doch eine Stringliste.
Delphi-Quellcode:
...
StringList.LoadFromFile(Dateiname);
StringList.Add(MeinText);
StringList.SaveToFile(Dateiname);
...

RavenIV 13. Mär 2008 07:46

Re: .txt lesen/schreiben
 
Benutze bitte die Suche hier.
Da findest Du bestimmt jede Menge Hilfe.

Andi1985 13. Mär 2008 07:49

Re: .txt lesen/schreiben
 
http://www.delphibasics.co.uk/RTL.asp?Name=AssignFile

Nuclear-Ping 13. Mär 2008 07:52

Re: .txt lesen/schreiben
 
http://www.delphi-treff.de/tutorials/datenspeicherung/

shader 13. Mär 2008 07:52

Re: .txt lesen/schreiben
 
Ich benutze schon TStringList, ich kann auch schreiben.
Nur kann ich immer eine Zeile schreiben. Und ich will ja mehrere
Sachen in die DAtei schreiben.

SuFu hab ich benutzt, aber bin nicht fündig zu StringList und nächste
Zeile schreiben.*sorry*

Nuclear-Ping 13. Mär 2008 07:54

Re: .txt lesen/schreiben
 
Wie wäre es, wenn du einfach mal die F1 Taste drückst und die Delphi-Hilfe, statt uns zu Grundlagenfragen bemühst?

Sollen wir jedem, der hier mit programmieren anfängt, das Rad (;)) nochmal von vorn erklären?

inherited 13. Mär 2008 07:57

Re: .txt lesen/schreiben
 
Dann zeig uns doch mal den Code mit dem du das machst.

shader 13. Mär 2008 08:01

Re: .txt lesen/schreiben
 
Denkst bestimmt, das ich nur den fertigen code will.
Aber is nicht so. Will und muss Delphi verstehen.

Delphi-Quellcode:
procedure TForm1.btn_einClick(Sender: TObject);
begin
  datei := TStringList.Create;
  nachricht := edt_nachr.Text;
  try
    datei.Add(nachricht);
    datei.SaveToFile('notiz.txt');
  finally
  datei.Free;
  end;
end;

bitsetter 13. Mär 2008 08:01

Re: .txt lesen/schreiben
 
Zitat:

Zitat von shader
Ich benutze schon TStringList, ich kann auch schreiben.
Nur kann ich immer eine Zeile schreiben. Und ich will ja mehrere
Sachen in die DAtei schreiben.

Delphi-Quellcode:
StringList.Add(Memo1.Text);
Stimmt nicht, mann kann auch mehrere Zeilen hinzufügen.

shader 13. Mär 2008 08:03

Re: .txt lesen/schreiben
 
@ bitsetter
Also ich kann da nur immer eine Zeile schreiben.

RavenIV 13. Mär 2008 08:04

Re: .txt lesen/schreiben
 
Zitat:

Zitat von shader
@ bitsetter
Also ich kann da nur immer eine Zeile schreiben.

So geht's aber:
Delphi-Quellcode:
datei.Add(nachricht_1);
datei.Add(nachricht_2);
datei.Add(nachricht_3);

DeddyH 13. Mär 2008 08:04

Re: .txt lesen/schreiben
 
Delphi-Quellcode:
procedure TForm1.btn_einClick(Sender: TObject);
begin
  datei := TStringList.Create;
  nachricht := edt_nachr.Text;
  try
    //erstmal das alte File laden, falls vorhanden
    if FileExists('notiz.txt') then
      datei.LoadFromFile('notiz.txt');
    datei.Add(nachricht);
    datei.SaveToFile('notiz.txt');
  finally
  datei.Free;
  end;
end;

Nuclear-Ping 13. Mär 2008 08:09

Re: .txt lesen/schreiben
 
[OT]
Nein, ich denke nicht, dass du nur fertigen Code willst. Sondern dass dir jmd. Schritt für Schritt erklärt, was dein Fehler ist und wie du's richtig machen kannst.
Ist ja auch gut und schön. Nur bist du nicht der erste der mit dem Programmieren anfängt und für Anfänger haben sich andere Leute bereits viel Mühe gemacht und Hilfedateien, Bücher, Tutorials, FAQs, etc. zusammenzustellen, die genau das alles vermitteln: Ein grobes Konzept von Delphi, den Klassen, den Möglichkeiten und ein Gefühl dafür.

Ich finde es einfach nur nicht gut, dass sich die Mentalität der Leute dank des Internets und der ganzen Foren dahin entwickelt, dass es ja viel einfacher ist, einfach jemanden zu fragen und sich alles vorkauen zu lassen, sobald Probleme auftauchen, statt sich mal selber durchzubeissen.

Aber wer weiß, vielleicht werd ich auch einfach nur langsam alt und will's der Selbstbedinungsjugend nicht mehr gönnen, da sich unser einst damals auch durch Bücher und viele Try-And-Errors durchbeissen mußte. :zwinker:
[/OT]

shader 13. Mär 2008 08:11

Re: .txt lesen/schreiben
 
@Raven IV
Delphi-Quellcode:
datei.Add(nachricht_1);
datei.Add(nachricht_2);
datei.Add(nachricht_3);
Wie soll das denn bitteschön funktionieren, da müsste ich ja für
jede Nachricht eine Variable anlegen bzw. a Array.

@DaddyH
Danke jetzt hats perfekt funktioniert, aber warum muss ich den File
vorher Laden!? Erkennt er nicht von selbst das da schon was
drinne steht!?

Eine frage hab ich noch, wie kann ich einen DAtensatz löschen!?
Wenn ich Delete nehme kommt da immer eine Zugriffsverletzung.

Nuclear-Ping 13. Mär 2008 08:13

Re: .txt lesen/schreiben
 
http://www.google.de/search?hl=de&q=...le-Suche&meta=

shader 13. Mär 2008 08:33

Re: .txt lesen/schreiben
 
Danke für den Link, nur finde ich da nicht wirklich was zu
Delete.
Eine Frage kommt da noch für mich auf, ich will die Daten
lesen. Mit dem letzten geht das ja gut. Aber wie mach ich
das mit den anderen!?
Kann ich das mit Index machen!? Möchte das so realisieren
das wenn man auf einen Button drückt immer der nächste
angezeigt wird. Danke

Tyrael Y. 13. Mär 2008 08:37

Re: .txt lesen/schreiben
 
Guck dir bitte die Links nochmal an, da wird TStringlist ausführlich erklärt.

TStringList hat viele Eigenschaften und Methoden, mit denen du all das erreichen Kannst was du willst.

Am Besten du öffnest mal die Hilfe und suchst nach TStringList und liest mal die Beschreibung zu allen Methoden und Eigenschaften, dann wird es dir wahrscheinlich wie Schuppen von den Augen fallen, wie du das realsieren kannst.

s-off 13. Mär 2008 08:38

Re: .txt lesen/schreiben
 
[OT]
Zitat:

Zitat von Nuclear-Ping
Sollen wir jedem, der hier mit programmieren anfängt, das Rad (;)) nochmal von vorn erklären?

Ähm, wo ist denn beim Rad Anfang und wo Ende? :mrgreen:
[/OT]

shader 13. Mär 2008 08:41

Re: .txt lesen/schreiben
 
Zitat:

Am Besten du öffnest mal die Hilfe und suchst nach TStringList und liest mal die
Beschreibung zu allen Methoden und Eigenschaften, dann wird es dir wahrscheinlich wie
Schuppen von den Augen fallen, wie du das realsieren kannst.
Hab ich ja gemacht, bin ja auch Fündig geworden. Nur bei Delete kommt ein Zugriffsfehler.
Genauso wie wennsch mit IndexOf arbeiten will.

Zipp 13. Mär 2008 08:48

Re: .txt lesen/schreiben
 
Delphi-Quellcode:
begin
  Datei := TStringList.Create;
  Datei.LoadFromFile(Pfad);
  for i:=0 to Neu.Count-1 do
    Datei.Add(Neu.Strings[i]);
  Datei.SaveToFile(Pfad);
end;
So müsste es eigentlich gehen. Bei Pfad musst man den kompletten Pfad angeben. Neu ist eine StringList mit den anzuhängenden Dateien. Wichtig ist, dass die Datei existiert und "Neu" mindestens eine Zeile besitzt, da es sonst zu einem Fehler kommt. Beides kann man durch if-Abfragen prüfen.
Den Code habe ich jetzt nicht ausprobiert. Kann also sein, dass da noch ein kleiner Fehler drin ist.

shader 13. Mär 2008 08:52

Re: .txt lesen/schreiben
 
@Zipp
DAnke für den Code, aber das Eintragen neuer Zeichen hab ich schon.
Probleme hab ich jetzt nur noch beim Löschen und Lesen.

Tyrael Y. 13. Mär 2008 08:57

Re: .txt lesen/schreiben
 
Zitat:

Zitat von shader
Zitat:

Am Besten du öffnest mal die Hilfe und suchst nach TStringList und liest mal die
Beschreibung zu allen Methoden und Eigenschaften, dann wird es dir wahrscheinlich wie
Schuppen von den Augen fallen, wie du das realsieren kannst.
Hab ich ja gemacht, bin ja auch Fündig geworden. Nur bei Delete kommt ein Zugriffsfehler.
Genauso wie wennsch mit IndexOf arbeiten will.

Delete erwartet als Parameter eine Zahl,
diese Zahl gibt an an welcher Position etwas gelöscht werden soll.
Eine Stringliste fängt mit der Position 0 an.

Falls du in einer Schleife mehrere Einträge nacheinander löschen möchtest, musst du bedenken, dass nachfolgende Einträge ja nach vorne rutschen und so du auf nicht mehr existente Einträge zugreifen möchtest.

Die Lösung hierbei ist die Schleife von der letzten Position der List zu beginen.

Delphi-Quellcode:
for i := MeineListe.Count-1 downto 0 do
begin
  MeinListe.Delete(i);
end;

IndexOf erwartete einen String und gint dir im Rückgabeergebnis zurück, an welcher Position in der Liste dieser string gefunden wurde.
Wird der gesuchte String nicht gefunden, gibt es -1 zurück.

shader 13. Mär 2008 09:04

Re: .txt lesen/schreiben
 
Hier ist mal mein Code für das löschen;
Delphi-Quellcode:
procedure TForm1.btn_loesClick(Sender: TObject);
begin
  datei.Delete[1];
end;
Das ist die Meldung, die ich bekomme;
Zitat:

[Fehler] Unit1.pas(61): Nicht genügend wirkliche Parameter
Und hier mal für das Lesen;
Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lbl_nachr.Caption := nachricht;
  lesen.Free;
end;
Und das ist die Fehlermeldung;
Zitat:

Listenindex überschreitet das Maximum(0)

Nuclear-Ping 13. Mär 2008 09:07

Re: .txt lesen/schreiben
 
Zitat:

Zitat von Tyrael Y.
IndexOf erwartete einen String und gint dir im Rückgabeergebnis zurück, an welcher Position in der Liste dieser string gefunden wurde.
Wird der gesuchte String nicht gefunden, gibt es -1 zurück.

... und folglich erhältst du auch eine Zugriffsverletzung, wenn du das vorher nicht überprüfst und auf StringList[-1] zugreifen willst.

shader 13. Mär 2008 09:09

Re: .txt lesen/schreiben
 
:wiejetzt: versteh ich grad net!?

Nuclear-Ping 13. Mär 2008 09:15

Re: .txt lesen/schreiben
 
Naja, das kommt davon, wenn man das Ziel will, ohne den Weg zu gehen. ;)

Soll heissen: Wie willst du auch etwas verstehen, wenn es dir scheinbar komplett an einem Grundlagenverständnis mangelt? Und nur weil ich das sage, will ich dir auch nichts böses. Sondern hol dir ein Buch oder studiere ein Tutorial was den Einstieg in Delphi von Grundauf erklärt. Wie die Syntax ist, wie man mit Klassen umgeht, Funktionen aufruft, etc. pp.

Das meinte ich auch vorn: Warum soll man jedesmal und jedesmal und jedesmal wieder von vorn den Urschleim unselbständigen Leuten erklären, die es einfacher finden, ihre Delphikenntnisse so wie du anzueignen, statt es wirklich zu STUDIEREN.

xZise 13. Mär 2008 09:22

Re: .txt lesen/schreiben
 
Zitat:

Zitat von shader
Hier ist mal mein Code für das löschen;
Delphi-Quellcode:
procedure TForm1.btn_loesClick(Sender: TObject);
begin
  datei.Delete[1];
end;

".Delete" ist eine Prozedur!

Zitat:

Zitat von shader
Und hier mal für das Lesen;
Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lbl_nachr.Caption := nachricht;
  lesen.Free;
end;

In "nachricht" steht nicht der Text der StringListe!

MfG
xZise

shader 13. Mär 2008 09:30

Re: .txt lesen/schreiben
 
Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lbl_nachr.Caption := nachricht;
  lesen.Free;
end;
Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lbl_nachr.Caption := lesen[0];
  lesen.Free;
end;
Funktioniert aber Trotzdem nicht.


Zitat:

Löschen einer Zeile ( var SList: TStingList; // Creat und Free nicht vergessen )
SList.Delete(0); //löscht die erste Zeile
So hab ich es auf einer Seite gefunden.

Funktioniert aber trotzdem alles nicht.


@Nuklear Ping
Was bringt mir ein Tutorial, hab den Code jetzt einfach mal fast 1:1 abkopiert und trotzdem
Funktioniert es nicht. Da bringt auch ein Tut nichts.
Kann mir wenigstens einer mal die Fehler erklären.

Klaus01 13. Mär 2008 09:38

Re: .txt lesen/schreiben
 
Guten Morgen,

Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create; //hier erstellst Du eine StringList Instance
  // es wird aber nichts in die Liste eingelesen
  lbl_nachr.Caption := lesen[0]; // hier versuchst Du aus der List zu lesen
  lesen.Free;
end;

logischer wäre es so:

Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lesen.loadFromFile(....);
  if lesen.count > 0 then
    lbl_nachr.Caption := lesen[0];
  lesen.Free;
end;
Grüße
Klaus

Nuclear-Ping 13. Mär 2008 09:59

Re: .txt lesen/schreiben
 
Zitat:

Zitat von shade
@Nuklear Ping
Was bringt mir ein Tutorial, hab den Code jetzt einfach mal fast 1:1 abkopiert und trotzdem
Funktioniert es nicht. Da bringt auch ein Tut nichts.
Kann mir wenigstens einer mal die Fehler erklären.

Code den man 1:1 abkopiert funktioniert in den meisten Fällen nicht, da die Leute die sowas posten in der Regel von einem fundiertem Grundlagenwissen ausgehen, sodass man fehlende / unpassende Stellen selber ergänzen / ersetzen kann. Und das wird durch Tutorials, Büchern, Beispielen, Hilfen, FAQ, Erfahrung, etc. vermittelt.

Hättest du das hinter dir, würdest du deine Fehler selbst sehen.

shader 13. Mär 2008 10:17

Re: .txt lesen/schreiben
 
Ne hätte den Fehler glaube niemals gefunden. Da hätte ich
1000 Tutorials machen können. Weißte auch warum,
weil mir die Praxis noch fehlt. Als ich den Code von Klaus gesehen
hab, wusste ich sofort wo mein Fehler liegt. Nämlich darin, das
ich die Datei nie vor der Methode geladen/geöffnet habe. Und deswegen
auch immer die Zugriffsverletzung kam. Weil ja nichts drin stand
bzw er nicht wusste welche Datei.

Nichts das ich was gegen Tutorials habe aber durch die Praxis
lernt man es erst richtig. Ist jedenfalls meine Meinung.
Sieht man ja heut auch oft im alltäglichen Leben,
wer Praxiserfahrung hat liegt eigentlich meist im Vorteil
gegenüber einem der nur Theorie kann.

shader 13. Mär 2008 10:28

Re: .txt lesen/schreiben
 
Eine Frage bzw Problem habe ich jetzt noch, unzwar
funktioniert das Löschen eines Datensatzes noch nicht.
Erkennt ihr vielleicht den Fehler;

Delphi-Quellcode:
begin
  loeschen := TStringList.Create;
  loeschen.LoadFromFile('notiz.txt');
  zeilen := loeschen.Count;
  loeschen.Delete(i);
  i := i + 1;
  loeschen.Free;
  if i = zeilen then
     ShowMessage('keine Notizen mehr vorhanden.');
end;

Nuclear-Ping 13. Mär 2008 10:30

Re: .txt lesen/schreiben
 
Hättest du Grundlagenwissen, hättest du von allein gewußt, dass eine frisch erzeugte Standard-Klasse keinen Inhalt hat. Woher auch? Soll Delphi raten was du vor hast? Das meiste was dein Programm machen - und auch nicht machen - soll, mußt du halt programmieren.

Ausserdem geht es darum, dass die Probleme und die Fragen die du hast, schon mindestens 100.000 andere Programmieranfänger auf der Erde hatten - und auch mindestens 50 Leute hier. Daher findet man das alles zu 100000% im Internet.

Und für mich hat sammeln von Praxiserfahrung nichts damit zu tun, sich in einem Forum seine Anfänger- und Syntaxfehler korrigieren zu lassen.

[edit]
Vergiss es ...
[/edit]

shader 13. Mär 2008 10:35

Re: .txt lesen/schreiben
 
Wenn es schon 50 gehabt hätte, hätte ich dazu auch was bei der SuFu finden
müssen. Aber war nicht der Fall. Is ja nun auch egal, jede hat eben seine
Meinung dazu.

Kannst du mir dann vielleicht sagen, wie ich überprüfen kann ob
er überhaupt versucht zu löschen!?

Nuclear-Ping 13. Mär 2008 10:37

Re: .txt lesen/schreiben
 
Zitat:

Zitat von shader
Wenn es schon 50 gehabt hätte, hätte ich dazu auch was bei der SuFu finden
müssen. Aber war nicht der Fall. Is ja nun auch egal, jede hat eben seine
Meinung dazu.

Böses Eigentor?

[dp]stringlist eintrag löschen[/dp]

DeddyH 13. Mär 2008 10:37

Re: .txt lesen/schreiben
 
Zitat:

Delphi-Quellcode:
begin
  loeschen := TStringList.Create;
  loeschen.LoadFromFile('notiz.txt');
  zeilen := loeschen.Count;
  loeschen.Delete(i); //welchen Wert soll i denn haben?
  i := i + 1;
  loeschen.Free; //wozu erst löschen, wenn dann die Liste einfach wieder zerstört wird?
  if i = zeilen then
     ShowMessage('keine Notizen mehr vorhanden.');
end;


Nuclear-Ping 13. Mär 2008 10:43

Re: .txt lesen/schreiben
 
Eine StringList hat auch NICHTS mit der Datei zu tun, die man lädt. Das heisst, wenn du aus der Liste eine Zeile löschst, bleibt die Datei davon unberührt. Du müßtest die Liste per .SaveToFile wieder zurückschreiben, falls du das erreichen willst.

Vielleicht war da ja der Stöpsel ...? ;)

shader 13. Mär 2008 10:52

Re: .txt lesen/schreiben
 
Na StringList hab ich ja auch nicht gesucht, da wusste ich noch nicht
das ich das damit mache. Aber trotzdem Danke, dadurch hab ich meinen Fehler
gefunden. Muss nach jedem Löschen meine Liste Speichern. Und siehe
da es funktioniert. Also das wars dann.
Danke an alle die geholfen haben

xZise 13. Mär 2008 15:09

Re: .txt lesen/schreiben
 
Hi shader,
Zitat:

Zitat von shader
Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lbl_nachr.Caption := nachricht;
  lesen.Free;
end;
Delphi-Quellcode:
procedure TForm1.btn_lesenClick(Sender: TObject);
var lesen: TStringList;
begin
  lesen := TStringList.Create;
  lbl_nachr.Caption := lesen[0];
  lesen.Free;
end;

Auch wenn du inzwischen weißt, was du machen musstest, guck dir mal beides an.
Programme bzw. Programmiersprachen bzw. Computer tun nur eine Sache.
Sie bekommen ein Input (den Code), wandeln den um (komplieren) und geben ihn aus (Output/die .exe).
Wenn der Input fehlt, wird nichts verarbeitet und demnach auch nichts ausgegeben.

Zitat:

Zitat von shader
Zitat:

Löschen einer Zeile ( var SList: TStingList; // Creat und Free nicht vergessen )
SList.Delete(0); //löscht die erste Zeile
So hab ich es auf einer Seite gefunden.

Dann benutzte es doch auch, und versuche nicht mit den [ ] rumzuhantieren.
Wenn du "()" verwendest, sind dass Übergabeparamter einer Prozedur oder Funktion.
Wenn du "[]" meinst du ein Array oder ein Set of.

Übrigens, dass du die Datei laden musst, wurde in mehreren Beiträgen schon vor meinen geschrieben. Und auch das Speichern war dort zu finden. Sogar das Laden von Dateien die nicht existieren.

Also benutzte zuerst die Suchenfunktion: Hier im Forum suchenDatei laden
Stelle dann deine Frage präzise, und Antworte präzise ;)
Ansonsten fehlt wieder Input! Und damit auch Output.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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