Autor Beitrag
del1312
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Do 19.06.03 10:26 
Hi Leute, hab mal folgende Frage:

Ich hab z.B ne Datei mit folgendem Inhalt:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Do 19.06.03 11:30 
www.delphi-forum.de/...ic.php?p=45780#45780

Du nimmst Explode und durhcläufst die Datei mit

ausblenden Delphi-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]);


aktUser ist der aktuelle User.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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:

ausblenden 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 :
ausblenden Quelltext
1:
2:
3:
4:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);


das hier mit eingetragen:
ausblenden Quelltext
1:
TStringDynArray = array of string;					


und die komplette Explode Funnktion
ausblenden volle Höhe 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:
ausblenden Quelltext
1:
end.					


aber ich nehme an ich hab da den totalen blödsinn zusammengeschustert oder ??? :oops:
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: 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:

ausblenden Quelltext
1:
myvar := ini.ReadString(edit1.text, var1);					
und in edit1 steht dann eben der nutzername...

ist es das?

mfG
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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.