| Autor |
Beitrag |
del1312
      
Beiträge: 190
|
Verfasst: Do 19.06.03 10:26
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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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 
      
Beiträge: 190
|
Verfasst: 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 
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Do 19.06.03 11:30
www.delphi-forum.de/...ic.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.
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
del1312 
      
Beiträge: 190
|
Verfasst: 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
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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.
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
del1312 
      
Beiträge: 190
|
Verfasst: 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
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Do 19.06.03 14:34
Hast du den Code den ich oben gepostet habe schon getestet?
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
del1312 
      
Beiträge: 190
|
Verfasst: 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
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:
Quelltext
aber ich nehme an ich hab da den totalen blödsinn zusammengeschustert oder ??? 
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: 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 
      
Beiträge: 190
|
Verfasst: 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
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: 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 
      
Beiträge: 190
|
Verfasst: 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.
|
|