Autor Beitrag
Peter1967
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 11.11.08 22:38 
Hallo,

ich habe eine textdatei in der Nummern gespeichert werden. Wenn ich jedoch einmal versehentlich eine falsche Nummer speicher möchte ich den letzten (also letzte Nr.) wieder löschen.

Ist dies durch einen klick auf einen Button möglich?

Vielen Dank im Voraus und lg, Peter
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 11.11.08 23:05 
Datei in Stringliste laden -> Letzte Zeile löschen -> Datei wieder speichern

Woran genau hängts nun?

_________________
PROGRAMMER: A device for converting coffee into software.
Peter1967 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 11.11.08 23:17 
Hallo,

ich danke dir, aber ich bin blutiger Anfänger und hab somit nur Bahnhof verstanden :)


... also hier speicher ich eine Zahl im .txt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button3Click(Sender: TObject);
begin
Append(datei);
writeln (datei, '2');
closefile (datei);
Memo1.Lines.LoadFromFile(pfad);
  Label1.caption:='Anzahl: '+IntToStr((Memo1.Lines.Count));


und hier habe ich einen Button mit welchem ich den letzten gespeicherten Eintrag löschen möchte.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button38Click(Sender: TObject);
begin
Append(datei);
closefile (datei);
end;


Und da stehe ich auch an... wie mache ich das?

vielen Dank im Voraus und lg, Peter
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.11.08 23:26 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  FileContents: TStringList;
begin
  FileContents := TStringList.Create;
  FileContents.LoadFromFile(datei);

  // hier löschen

  FileContents.SaveToFile(datei);
  FileContents.Free;
Neben LoadFromFile etc. gibt es zum Löschen die Funktion Delete, die Anzahl der Zeilen bekommst du mit Count.
Oreaden
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: Di 11.11.08 23:54 
Hallo Peter,

da hast du leider Pech gehabt. Dennoch gibt es alternativen,
  • File of ...
  • Datenbank
  • XML
  • Umkopieren

Das Problem an den Textdateien ist einfach, daß Du darauf nicht frei positionieren kannst :evil:

Wenn Du die TStringList in Betracht ziehst, denke daran, daß diese nur bei geringen Datenbeständen arbeitet.

Welche Lösung die Richtige ist, hängt also sehr stark von deinem Anwendungsfall ab.

Wünsche Dir noch einen schönen Abend
Oreaden


Zuletzt bearbeitet von Oreaden am Mi 12.11.08 00:11, insgesamt 1-mal bearbeitet
Peter1967 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 12.11.08 00:07 
Hallo,

ich danke Euch.

Somit werde ich wohl über ein Datenbank nicht hinwegkommen.

Trotzdem vielen Dank und lg, Peter
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 12.11.08 01:03 
user profile iconPeter1967 hat folgendes geschrieben Zum zitierten Posting springen:
Somit werde ich wohl über ein Datenbank nicht hinwegkommen.

Äh, wieso das denn?
Bei wenigen Zeilen ist eine StringList bzw. Textdatei vielleicht noch ausreichend.
Weiß ja nicht, wie viele Werte du da verarbeitest.

_________________
PROGRAMMER: A device for converting coffee into software.
Peter1967 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 12.11.08 07:38 
Hallo,

es werden zwar nur Zahlen gespeichert, aber diese könnten dann schon bis zu 10.000 Zeilen werden.

Ich weiß jetzt nur nicht welche Datenbank ich verwenden soll. Mit dbExpress komme ich nicht so klar. Vielleicht könnt Ihr mir da weiterhelfen.

Zum Vorhaben...

Es werden nur Zahlen gespeichert, diese können (wie oben schon geschrieben) mehrere tausend Zeilen groß sein.
Mit diesen Zahlen soll dann auch einiges geschehen:
1. Anzahl ausgeben (das hab ich ja schon zu stande gebracht)
2. Zahlen umkehren (d.h. die neuesten Zahlen sollten immer als erstes aufscheinen)
3. Nach bestimmten Zahlen suchen
4. Berechnung der Zahlen
5. Die Berechnung wieder ausgeben

Ich habe also nichts großartiges vor, nur dürfte es an der Größe der Daten scheitern.

Daher auch meine Frage... Welche DB wäre da am besten geeignet?


lg, Peter
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 12.11.08 11:20 
Meine Meinung: Nimm einfach einen Stream und speichere die sequentiell hinein, TFileStream arbeitet direkt mit der Datei, TMemoryStream im Speicher.
Das kann bei guter Implementierung auch sehr schnell sein und da die Zahlen so nicht als String gespeichert werden und auch nicht dauernd Konvertierungen stattfinden auch platzsparender und schneller als dein Textdateiansatz.

Wenn du 10000 Integerwerte hast, dann ist dein Stream / deine Datei 10000 * 4 Byte = 40 KB groß, das ist überhaupt kein Problem. ;-)
Und den Stream kannst du im Speicher halten und direkt damit arbeiten oder du kannst den Inhalt auch in eine Liste laden.

Beispiel im Anhang. Das ist keine besonders schnelle Lösung, aber vielleicht schnell genug. Man kann da auch noch viel schnellere Lösungen basteln.
Wenn du im Beispiel statt eines TMemoryStream einen TFileStream benutzt, dann fällt das Laden und Speichern weg, dann wird direkt mit der Datei gearbeitet.

// EDIT:
:oops: Anhang vergessen...
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von jaenicke am Mi 12.11.08 11:55, insgesamt 1-mal bearbeitet
Oreaden
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 16



BeitragVerfasst: Mi 12.11.08 11:34 
Guten Morgen Peter1967,

Du möchtest also ausschliesslich Zahlen für weitere Berechnungen speichern? Diese weisen doch einen bestimmten Typ auf, oder? Diesen Typ kannst Du doch verwenden um eine typisierte Datei zu erzeugen und zu verwalten. Der Vorteil ist, Du kannst Wahlfrei jede Zahl lesen, schreiben, überschreiben. Das System kennt die Größe deines Datentyps und kann somit die Berechnung der Speicheradresse vornehmen. Das sollte akzeptable Bearbeitungsgeschwindigkeiten für Zahlen bis 2 GB bringen.

Schöne Grüße
Oreaden
Peter1967 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 12.11.08 11:50 
Hallo,

ich danke Euch allen vielmals und ich werde mich einmal mit den typisierten Dateien beschäftigen.


Aber auch allen anderen natürlich DANKE FÜR DIE HILFE

lg, Peter
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 12.11.08 23:08 
user profile iconOreaden hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du die TStringList in Betracht ziehst, denke daran, daß diese nur bei geringen Datenbeständen arbeitet.

Also, TStringList kann man durchaus mit Datenbeständen > 10 MB, und mit Sicherheit bis zur maximalen Stringlänge (ist das ~ 2 GB?) verwenden! 12 MB getestet -> klappt ohne Probleme.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!