Autor |
Beitrag |
Peter1967
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
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.
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
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.11.08 23:26
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var FileContents: TStringList; begin FileContents := TStringList.Create; FileContents.LoadFromFile(datei);
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
      
Beiträge: 16
|
Verfasst: 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
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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 12.11.08 01:03
Peter1967 hat folgendes geschrieben : | 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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:
 Anhang vergessen...
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von jaenicke am Mi 12.11.08 11:55, insgesamt 1-mal bearbeitet
|
|
Oreaden
      
Beiträge: 16
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: 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
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 12.11.08 23:08
Oreaden hat folgendes geschrieben : | 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!
|
|