Autor Beitrag
arminho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Do 19.06.08 19:50 
hallo leute,
ich komme zur zeit bei mir nicht wirklich weiter, da ich nicht weiß wie man das umsetzen kann.
unswar habe ich ein .txt-File in welches Daten reingeschrieben werden können, von dort wieder abgerufen werden und bearbeitet bzw. gelöscht etc. werden können.
ich möchte jeder zeile dieses .txt-Files eine Erkennung zuweisen, sodass ich später einfach mit dem bennenen der Erkennung die entsprechende Zeile abrufen kann.
Zeile 1 soll z.B. ID 1 haben, Zeile 2 ID 2 etc.
am liebsten wäre es mir wenn er mir automatisch die Erkennung vergibt, sobald eine neue Zeile dazugefügt wird.

Ich möchte hier auch keinen fertigen Code oder so, sondern nur mal wissen mit welcher Methode bzw. Befehlen das zu realisieren wäre, da ich echt nicht weiter weiß.

danke euch für eure Hilfe


Zuletzt bearbeitet von arminho am Do 19.06.08 19:53, insgesamt 2-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 19.06.08 20:25 
Moin!

user profile iconarminho hat folgendes geschrieben:
ich möchte jeder zeile dieses .txt-Files eine Erkennung zuweisen, sodass ich später einfach mit dem bennenen der Erkennung die entsprechende Zeile abrufen kann.
Zeile 1 soll z.B. ID 1 haben, Zeile 2 ID 2 etc.
am liebsten wäre es mir wenn er mir automatisch die Erkennung vergibt, sobald eine neue Zeile dazugefügt wird.
Also mit Automatik bei einer Text-Datei sehe ich da ziemlich schwarz :?

Ansatz: :idea:
  • NextID: Cardinal :arrow: Autoincrement-Zähler, bei Programminstallation/Inbetriebnahme auf 0 setzen und in jeder Sitzung auf den letzten Wert wiederherstellen
  • StringListe anlegen, Textdatei reinladen
  • Format der Textdatei: die ersten 8 Zeichen sind die Hexdarstellung der Zeilen-ID, abtrennen und mit StrToInt64('$'+Copy(SL.Strings[i],1,8 )) in dem Object dieser Zeile ablegen :arrow: das ist die Zeilen-ID
  • beim Anlegen neuer Zeilen den Autoincrement-Index als zugehöriges Object ablegen, dann eins draufzählen
  • Suchen einer ID in der Liste: .IndexOfObject()
  • Vorm Speichern das Object mit IntToHex(Cardinal(SL.Objects[i]),8 ) vorne an den String anfügen
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.06.08 00:17 
Mann, mann, was soll denn das werden ? Wegen so etwas noch mit Objekten etc. rumfummeln ? :shock: schreibe die Zeilennummern an den Beginn jeder Zeile und fertig. Den Rest macht man mit copy. 8)

_________________
Gruß
Hansa
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 20.06.08 11:39 
Moin!

user profile iconhansa hat folgendes geschrieben:
Mann, mann, was soll denn das werden ? Wegen so etwas noch mit Objekten etc. rumfummeln ?
Wie mit Objekten rumfummeln? :nixweiss: Einfach die Zeilen-ID per Pointer()-Typecast da ablegen, wo sowieso Platz dafür ist. ;)

user profile iconhansa hat folgendes geschrieben:
schreibe die Zeilennummern an den Beginn jeder Zeile und fertig. Den Rest macht man mit copy. 8)
Aha, und das Problem mit der Zahlenlänge im String? Das ist doch wohl in meinem Vorschlag besser gelöst... :D (eben outband 8))

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Fr 20.06.08 13:02 
@arminho beschreib doch mal was du in etwa mit deinem Programm anstellen willst. Möglicherweise gibt es ja auch noch einfachere Lösungen.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Fr 20.06.08 13:52 
Wenn du das machen möchtest, was ich vermute, könntest du dir mal die Datenbank SQLite angucken.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.06.08 14:20 
user profile iconNarses hat folgendes geschrieben:
Aha, und das Problem mit der Zahlenlänge im String? Das ist doch wohl in meinem Vorschlag besser gelöst... :D (eben outband 8))


Narses, Objects sind ja schön und gut. Ich bin ja schon froh, wenn einer überhaut weiß, dass es so was gibt. Wieso ist die Zahlenlänge im String ein Problem ? Du meinst 1 ist kleiner als 99999 oder wie ? :shock: Die muss an den Anfang des Strings und zwar rechtsbündig. Die Stringliste wäre dann mit solchen Sachen gefüllt (5-stellige Zahlen) :

ausblenden Delphi-Quelltext
1:
2:
    1sldlaffdaflfdla
99999abc


Da wären alle Informationen enthalten, die er braucht. Natürlich braucht man noch einen Hilfsstring für den reinen String-Inhalt. Dafür reicht :

ausblenden Delphi-Quelltext
1:
HilfSt := copy (6,length (sl.strings[i]);					


Um diese eine Zahl pro Zeile zu verwalten braucht man dann nicht mehr Objects erzeugen und wieder freigeben etc. Man hätte ja dann auch quasi 2 Listen : einmal die Stringlist selber und dann noch die Liste der Objekte. Nene, wenn schon dann umgekehrt. Man nehme eine TObjectList mit folgenden Elementen :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
MeinObjekt = class(TObject)
  nr : integer;
  st : string;
end;


Für die Liste soll er OwnsObjects auf true setzen und fertig.

_________________
Gruß
Hansa
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 20.06.08 14:30 
Moin!

user profile iconhansa hat folgendes geschrieben:
Narses, Objects sind ja schön und gut. Ich bin ja schon froh, wenn einer überhaut weiß, dass es so was gibt.
user profile iconhansa, du hast meinen Post nicht verstanden... 8)

user profile iconhansa hat folgendes geschrieben:
Wieso ist die Zahlenlänge im String ein Problem ? Du meinst 1 ist kleiner als 99999 oder wie ? :shock: Die muss an den Anfang des Strings und zwar rechtsbündig.
Das ist sie bei mir auch, aber dafür über den vollen Wertebereich von Cardinal und noch dazu effizienter codiert (hex). :idea:

user profile iconhansa hat folgendes geschrieben:
Um diese eine Zahl pro Zeile zu verwalten braucht man dann nicht mehr Objects erzeugen und wieder freigeben etc.
Das habe ich auch nicht vorgeschlagen, sonden das zugeordnete .Objects[] eines .Strings[] in einer TStringList als Speicher für die Zeilen-ID zu "missbrauchen" (Typecast auf Pointer(), du erinnerst dich sicher an meine erste Erwähnung weiter oben, oder? 8)).
:think:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.06.08 14:47 
user profile iconNarses hat folgendes geschrieben:
Format der Textdatei: die ersten 8 Zeichen sind die Hexdarstellung der Zeilen-ID, abtrennen und mit StrToInt64('$'+Copy(SL.Strings[i],1,8 )) in dem Object dieser Zeile ablegen :arrow: das ist die Zeilen-ID

Ne, Narses ich verstehe wirklich nicht, was Du da vor hast. Echt nicht ! :mrgreen:

Was hat denn da überhaupt Hex zu suchen ? Du willst ja selber die ersten 8 Stellen der Strings für die Zeilennr. "missbrauchen". Was sollen denn jetzt da noch die Objects ? :gruebel:

_________________
Gruß
Hansa
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 20.06.08 15:18 
Moin!

user profile iconhansa hat folgendes geschrieben:
Ne, Narses ich verstehe wirklich nicht, was Du da vor hast. Echt nicht !
:roll: ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var
  SL: TStringList;
  AutoCount: Cardinal = 0;
  i: Integer;

begin
  SL := TStringList.Create;

  // Datei laden
  SL.LoadFromFile('C:\Test.txt');
  for i := 0 to SL.Count-1 do begin
    SL.Objects[i] := Pointer(StrToInt64(Copy(SL.Strings[i],1,8)));
    SL.Strings[i] := Copy(SL.Strings[i],9,Length(SL.Strings[i])-8);
  end;

  // neuen Eintrag anlegen
  SL.AddObject('Neuer Eintrag',Pointer(AutoCount));
  Inc(AutoCount);

  // Datei speichern
  for i := 0 to SL.Count-1 do
    SL.Strings[i] := IntToHex(Integer(SL.Objects[i]),8) +SL.Strings[i];
  SL.SaveToFile('C:\Test.txt');
  SL.Free;
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Fr 20.06.08 15:31 
Warum nimmt man nicht einfach eine StringList und gut ist? Dort ist jeder Zeile eine Nummer zugeordnet also kann jede Zeile eindeutig Identifiziert werden und es gibt die entsprechenden Befehle zum Anfügen, Ändern und Löschen!

Kann mir vorstellen, dass arminho vorher nur mit einen Stringgearbeitet hatte und die TStringList gar nicht kannte!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 20.06.08 15:39 
Moin!

user profile iconSirke hat folgendes geschrieben:
Warum nimmt man nicht einfach eine StringList und gut ist? Dort ist jeder Zeile eine Nummer zugeordnet also kann jede Zeile eindeutig Identifiziert werden und es gibt die entsprechenden Befehle zum Anfügen, Ändern und Löschen!
Das klappt nur so alleine nicht, weil dann die Zeilen keine eindeutige Kennung haben, sondern nur einen relativen Index. Wenn du z.B. eine Zeile löscht oder einfügst, dann kannst du ein Indexproblem bekommen, wenn du dir "ausserhalb" eine Zeile merken möchtest. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.06.08 15:44 
Vermutlich reicht die Stringliste alleine schon. Ich habe ja auch eigentlich nur wegen Narses Beitrag geantwortet. Also wegen seiner Objects/Pointer/Hex-Orgie. :mrgreen: @Narses : warte mal auf den Fragesteller. Wir diskutieren über ungelegte Eier.

_________________
Gruß
Hansa
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 20.06.08 15:49 
Moin!

user profile iconhansa hat folgendes geschrieben:
Vermutlich reicht die Stringliste alleine schon.
Das kann nicht sein, wenn der Fragesteller seine Frage korrekt gestellt hat. ;)

user profile iconhansa hat folgendes geschrieben:
Ich habe ja auch eigentlich nur wegen Narses Beitrag geantwortet. Also wegen seiner Objects/Pointer/Hex-Orgie. :mrgreen: @Narses : warte mal auf den Fragesteller. Wir diskutieren über ungelegte Eier.
Ich "diskutiere" nicht mit dem Fragesteller, sondern gebe dir grade Nachhilfe... :mrgreen:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.06.08 16:02 
Sei bloß ruhig. Du mit Deiner Pointer-Objects-Hex-Stringliste. :mrgreen:

_________________
Gruß
Hansa
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 22.06.08 22:09 
irgendwie raff ichs grad nicht :D also ich mach son kack immer mit ner Stringlist :D
dann hab ich die Zeilen fein Säuberlich...
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: So 22.06.08 22:27 
user profile iconFinnO hat folgendes geschrieben:
irgendwie raff ichs grad nicht :D also ich mach son kack immer mit ner Stringlist :D
dann hab ich die Zeilen fein Säuberlich...

Hier geht es aber um absolute Kennungen. Wenn du in einer Stringlist, die bisher 2 Zeilen hat, eine weitere einfügst, dann ist die Nummer 3. Wenn du aber davor noch eine einfügst, wird aus 3 plötzlich 4. Hier wird ein unveränderlicher Identifier gesucht. (wenn ich diesen String-Pointer-Object-Hex-Integer-Streit verstanden habe :mrgreen: )

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 23.06.08 21:23 
okay - dann macht die geschichte sinn