Entwickler-Ecke
Dateizugriff - Bestimmte Stellenl aus ner Datei auslesen, wie mach ich das?
del1312 - Do 19.06.03 10:26
Titel: Bestimmte Stellenl aus ner Datei auslesen, wie mach ich das?
Hi Leute, hab mal folgende Frage:
Ich hab z.B ne Datei mit folgendem Inhalt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| . . . r1::600:u1,u2,u2 r2::600:u1,u2,u2 r3::600:u1,u2,u2 r4::600:u1,u2,u2 . . . |
Ich hab nun nen Programm, wo ein User sich als z.B r1 dentifiziert
und in einer listbox soll nun die auswahl stehen:
u1
u2
u3
wie lese ich aus der datei? kann mir dabei bitte einer helfen?
[/list]
Tino - Do 19.06.03 10:55
Hallo,
ich nehme mal an das u1 u2 u2 in der Listbox erscheinen soll weil diese ein der gleichen Zeile stehen wie r1, oder?
Lad die ganze Datei am besten in eine StringList (tStringList) und gehe mit einer For-Next-Schleife die Datei durch und suche nach r1 am Anfang (mit der Anweisung Copy). Hast Du die Zeile gefunden kannst du wiederum mit der Anweisung Copy die einzelnen Teile aus dem String rausholen und diese der ListBox hinzufügen.
Gruß
Tino
del1312 - Do 19.06.03 11:14
ja genau die sollen dann dort in der listbox erscheinen. hm wie mach ich das mit der stringlist und der next schleife? sorry wenn ich frag aber ich fummel mich grad durch delphi und lern noch :oops:
Tweafis - Do 19.06.03 11:30
http://www.delphi-forum.de/viewtopic.php?p=45780#45780
Du nimmst Explode und durhcläufst die Datei mit
Delphi-Quelltext
1: 2: 3: 4:
| while not(explode('::', aktZeile)[0] = aktUser or eof(datei)) do ; aktUserArray := explode('::', aktZeile);
for x:=1 to High(aktUserArray) do Listbox1.Items.Add(aktUserArray[x]); |
aktUser ist der aktuelle User.
del1312 - Do 19.06.03 11:55
hm aber der ließt nicht die zeile dann aus sonder die ganze datei oder? ich will nur das wenn der user sich als r1 identifiziert nur die zeile r1 ausgelesen wird und in der listbox dann halt angezeigt wird:
u1
u2
u3
Tweafis - Do 19.06.03 11:57
er muss ja die ganze datei auslesen, woher soll er sonst wissen in welcher zeile dein user steht? Bei meiner lösung liest er solange aus bis eine zeile kommt die mit deinem user beginnt (aktUser) und mit dieser kannst du dann weiterarbeiten.
del1312 - Do 19.06.03 14:21
komme nicht weiter, kann damit irgendwie nichts anfangen :( kann mir nicht einer ein wenig erklären wie genau das geht?
Tweafis - Do 19.06.03 14:34
Hast du den Code den ich oben gepostet habe schon getestet?
del1312 - Do 19.06.03 14:50
ja aber so richtig weiss ich nicht wie ich ihn einbauen soll. hab folgendes gemacht:
Hab nen Button der bei Klick das hier ausführt:
Quelltext
1: 2: 3: 4:
| while not(explode('::', aktZeile)[0] = aktUser or eof(datei)) do {nächste Zeile in aktZeile auslesen}; aktUserArray := explode('::', aktZeile);
for x:=1 to High(aktUserArray) do Listbox1.Items.Add(aktUserArray[x]); |
Dann hab ich unter :
Quelltext
1: 2: 3: 4:
| type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); |
das hier mit eingetragen:
Quelltext
1:
| TStringDynArray = array of string; |
und die komplette Explode Funnktion
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray; var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen);
Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := StrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); // wirkliche Länge festlegen end; |
eingefügt vor:
aber ich nehme an ich hab da den totalen blödsinn zusammengeschustert oder ??? :oops:
kiwicht - Do 19.06.03 15:29
ähm, ich hab noch ne andere Idee:
Was hälst du von einer Ini-Datein, bzw. der Verwendung der Registry?
Deine Ini sähe dann z.B so aus:
| Zitat: |
[r1]
var1=u1
var2=u2
var3=u3
etc. pp. |
und du brauchst dir nicht solche Mühe beim auslesen machen, weil du einfach nur sagts:
Quelltext
1:
| myvar := ini.ReadString(edit1.text, var1); |
und in edit1 steht dann eben der nutzername...
ist es das?
mfG
del1312 - Do 19.06.03 19:05
nee leider nicht, weil die user (u1, u2, u2) variabel sind, die sind nicht festgelegt. es ist einfach so. da ist ne unix group datei. und die gruppenleiter (r1,r2,r3) sollen die ihre gruppe auslesen können und dann eben die user (u1,u2,u3) hinzufügen oder löschen können.
kiwicht - Do 19.06.03 22:29
hm.. und wenn du es ungfähr so machst:
| Zitat: |
Ini:
[r1]
sum='3'
u1='xxx'
u2='xxx'
u3='xxx' |
Willst du jetzt einen neuen User anlegen, fragst du erst die Ini ab, wieviele es schon gibt ("SUM" auslesen), und kannst dann, diesen Wert mit 1 inkrementiert, einen neune User anlegen.
Also für u4 einmal den Schlüssel, und ausserdem den SUM-Wert um u4 ergänzen.
Beim Löschen halt genau anders rum.
Und das Auslesen dürfte dann ja klar sein...
meinste nicht? Ich denke das würde auch gehen...
mfG
del1312 - Fr 20.06.03 07:03
hm naja aber ich muss doch nach diesem schema die datei nach der veränderung schreiben: r1::671,u1,2,3,4,5,
und wenn ich das per ini mache dann liest er mir ja nur ne datei aus. wenn der user jetzt an nem anderen rechner sitzt dann findet er die user ja nicht weil diese konfigdatei nur auf dem anderen rechner ist. nee ich glaub die variante mit der ini oder reg geht leider nicht :( trotzdem vielen dank für die tipps. vielleicht kannst du mir aber beim auslesen der datei helfen? wir hatten ja oben schon was aber ich komme da nicht weit.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!