Autor Beitrag
en!gma
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 04.01.05 16:03 
also hi...
hab kleines prob und hoffe ihr könnt mir wieder mal helfen...
also ich hab in einer ini datei mehrere.... "packete" welche jeweils aus 1
namen und mehreren zahlen besteht ( zB 1 7 5 oder 2 4 oder 2 4 1 7)

dann hab ich 10 checkboxen...für jede zahl eine (0-9)...
also und jex möchte ich am anfang das man die zahlen anwählt an den checkboxen die man möchte...
und das programm sucht mir die namen der "packete" heraus...

naja villeicht ein bissl unverständlich...
ich versuchs mal anhand eines beispiels zu erklären...

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[packet1]
name=packet1
zahl=1 7 5
[packet2]
name=packet2
zahl=2 4
[packet3]
name=packet3
zahl=2 4 1 7

so sieht erstmal meine ini beispielsweise aus...
nun wenn ich häckchen setze bei 2 und 4...
sollte er mir nur packet2 in eine memo schreiben...
wenn ich allerdings 1,2,4 und 7 anwähle...
sollte er mir packet2 und packet3 in die memo schreiben...
und bei 1,2,4,5 und 7 halte alle 3 packete...

thx schonma ;D

mfg
en!gma
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 04.01.05 16:47 
Moin!

Ich hab ehrlich gesagt keine Lust, mich mit der Logik deiner Abfrage zu beschäftigen, dauert mir zu lange. Könntest du bitte mal etwas "geordneter" erklären, wie der Zusammenhang von "angekreuzten Kästchen" und "Paketen" ist?

Ich denke, das würde es deutlich erleichtern, dir einen Tipp zu geben.

Hast du schon Quelltext zu deinem Problem? Wäre natürlich nicht schlecht, den mal zu sehen, nicht wahr? :wink:

cu
Narses
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 04.01.05 16:56 
also...tut mir leid das ich es etwas komisch beschrieben habe...
einen quellcode gibt es leider noch nicht, da das eigentlich die hauptprozedur von dem programm
sein soll.
aber ich hab einfach mal ein bild gemacht wie es später ca aussehen sollte...
user defined image
(hmm weiss nich warum er es nich anzeigt -> www.phoenix-designz.de/bla23.JPG )
also ich wähle oben die zahlen aus...und wenn ich auf search drücke...
sucht er mir alle pakete aus meiner ini datei, welche die zahlen enthalten und
schreibt ihren namen in die ini datei...
auf dem bild hab ich einfach mal das 2. beispiel genommen...

ich hoffe es ist jex ein bischen verständlicher

mfg

en!gma
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 04.01.05 17:02 
Moin!

Sorry, auch der 2. Versuch kam bei mir nicht an (nettes Bild, aber auch nicht mehr Informationsgehalt, als das Textbeispiel).

Formuliere doch bitte mal aus, WANN GENAU ein Paket die "ausgewählt"-Bedingung erfüllt. Offensichtlich spielen da doch Untermengen eine Rolle...

cu
Narses
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 04.01.05 17:05 
der name des packets wird angezeigt...wenn alle zahlen, welche in der ini datei gespeichert sind...
auch oben angekreuzt sind...wenn du das verstanden hast...kann ich versuchen dir zu erklären wann es noch angezeigt werden soll...sonst verwirrt es dich glaub ich nur noch mehr ;D
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 04.01.05 17:09 
Eventuell meinst du etwas wie ReadSection und ReadSectionValues.
Dafür musst du aber wissen, wie alle Pakete heißen. Schau es dir in der Delphi-Hilfe einmal an.
Dann musst du noch die eingelesenen Strings nach deinen Zahlen durchsuchen. Das dürfte aber wohl das kleinere Problem sein (String-Funktion Pos).
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 04.01.05 17:19 
OK, das war klarer.

Vorschlag: Da nur Ziffern in den Listen der INI-Keys stehen, kannst du diese doch als Bitnummern in einem Wort auffassen und setzen, wenn die Ziffer in der Liste vorkommt. So hast du eine binäre Darstellung deiner Ziffernliste erreicht. Dann wandelst du die CheckBoxen-Stati in ebenso eine binäre Darstellung um und vergleichst so:

ausblenden Delphi-Quelltext
1:
2:
if (((NOT ziffernliste_cb_bin) and ziffernliste_ini_bin) = 0then
  ShowMessage('Alle INI-Ziffern sind angekreuzt!');


Sowas in der Art? Kann man auch mit Mengen machen, ist Geschmacksache.

cu
Narses
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Sa 08.01.05 12:03 
danke erstmal für die antworten aber ich habs jex ein bissl anders gemacht...weil auch wörter usw
vorkommen sollten und nun funktioniert es erstmal...
falls es wen interessiert...ich habs mit
TCheckBox(FindComponent gemacht...

aber nun is mein problem...ich nehm einfach nochmal die beispiel ini von oben:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[1]
name=paket1
zahl=1 7 5
[2]
name=paket2
zahl=2 4
[3]
name=paket3
zahl=2 4 1 7


ich habe nun eine listbox...in die sind die verschiedenen namen eingetragen...
packet1,2 & 3...wenn ich nun eine auswähle, soll er mir in ein label die zahlen schreiben...

das problem hierbei ist, dass ich ja nicht weiss ob nun [1] [2] oder [3] angeklickt habe...

kann ich also in der ini einfach nach dem namen suchen?
oder geht das nicht so einfach?

mfg
en!gma
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 08.01.05 12:24 
en!gma hat folgendes geschrieben:
das problem hierbei ist, dass ich ja nicht weiss ob nun [1] [2] oder [3] angeklickt habe...

kann ich also in der ini einfach nach dem namen suchen?
oder geht das nicht so einfach?
Du hast doch die Sections 1, 2 und 3, die kannst du auslesen. Entweder die komplette Section auf einmal mit ReadSection, oder nur einen Wert mit ReadString (z.B. ReadString('1', 'name', '') um den Wert "name" aus der Section mit dem Namen "1" auszulesen.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Sa 08.01.05 18:39 
nein ich denke das ist ein wenig schwerer, wenn man den anfang nich richtig verstanden hat...

also ich habe ja erst mit meinem "suchalgorithmus" (falls man das so nennen kann)
verschiedene namen aus verschiedenen sections ausgelesen...

dann habe ich zB in der ListBox1 5 verschiedene namen stehen zB aus den sections [2] [5] [6]...
aber wenn ich nun eine davon anklicke...kann ich doch nicht genau sagen es soll [2] oder so sein...
weil ja bei jeder suche neue namen darinstehen...

und nun hatte ich vor...falls es geht...die ini datei nach einem bestimmten "namen" durchsuchen zu lassen...
und wenn man diesen namen gefunden hat....soll zB der wert "zahlen" aus der gleichen section ausgegeben werden.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 08.01.05 22:07 
Moin!

Sorry, ich will dir nicht auf den Schlipps treten, aber dein Talent für "Beschreibungen" ist nicht gerade ruhmreich... :?

Ich hab ja schon weiter oben nicht wirklich den Eindruck, verstanden zu haben, was du da eigentlich tust, aber mittlerweile glaube ich, wird´s noch etwas komplizierter. :wink:

Unter Umständen hilft es ja was, wenn du mal ein bischen den geheimnisvollen Vorhang lüftest, und uns erzählst, was du da eigentlich tun willst, hm?

Ansonsten würde ich dazu raten, die INI-Datei in eine passende Datenstruktur zu lesen, um besser Abfragen durchführen zu können. Ist auch performanter, als die ewigen INI-Zugriffe.

cu
Narses

PS: Ich würd´ ja wirklich gerne helfen, aber ich blick echt nich, was du da tust :gruebel: Wenn ich mir die "rege Teilnahme" an diesem Thread ansehe, glaube ich, geht´s den anderen ähnlich...
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 08.01.05 22:25 
mhmm... ich glaub ich habs geblickt. du hast ne liste, die einem namen eine zahlenreihe zuordnet, also zumbeispiel dem namen Packet1 die zahlenreihe 157 (hab die zahlen in die richtige reihenfolge gebracht :D) dann würde ich allerdungs genau andersrum vorgehen: ich würde die zahlenreihe als name und den namen als wert benutzen:
ausblenden Quelltext
1:
2:
3:
[packete]
157=packet1
24=packet2

das machts doch einfacher! dann musst du nur noch die captions oder Tags der angekreuzten Checkboxes als string hintereinander legen und ReadString('24') machen, dann das ganze mit allen kombinationen durchprobieren. also erstmal die kombos mit 2 zeichen nehmen und von vorne anfangen (angenommen 12457 sind angekreuzt):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
12
14
15
17
24
25
27
45
47
57
---
124
125
127
145
147
.......

das ganze natürlich per schleife. sorry, aber ich kann mir nicht vorstellen wie das anders gehen soll, es sei denn du lädts dir erstmal alle gespeicherten teile in einen Array und gehst den dann durch... mal kurz checken...jap. ReadSection liefert dir alle Namen, nicht die Werte. die haust du in ein Memo.Lines und suchts übereinstimmungen mit den checkboxes :D das sollte reichen.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 08.01.05 22:41 
Auch ne Methode, einfach die Problemstellung der Lösung anpassen... :D

Wer sagt denn, dass er die INI-Datei nicht einfach so beibehalten muss, weil sie z.B. gar nicht von ihm ist?
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Sa 08.01.05 22:55 
doch doch...sie ist wohl von mir...
naja aba um das ganze jex mal eindeutig zu machen was ich meine... ;D

ich hab mich rangesetzt und wollte einen diablo2 runencatcher programmieren...

villeicht kennt der eine oder andere das spiel ja schon...
naja auf jedenfall...kann man runen sammeln...es gibt 33 runen...
und aus diesen kann man "runenwörter" machen...
also ein paar runen hintereinanderklatschen und es kommt ein wort raus, welches vorher bestimmt ist...

also kreuzt man in dem tool alle runen an die man hat...
und das programm zeigt dir alle runenwörter an die du machen kannst...

so weit hab ich es bereits...
aber ich habe in der ini 15 stats gespeichert...
und wenn ich nu in der listbox was anklick soll er mir die stats in ein fenster daneben schreiben...

das is der code den ich bisher habe...
der schreibt die möglichen runenwörter schonmal in eine listbox...
nur weiss ihc nich wie ich es machen soll damit die stats ausgelesen werden...

ausblenden volle Höhe 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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Button1Click(Sender: TObject);
var
RuneIni : TIniFile;
Chk1:TCheckbox;Chk2:TCheckbox;Chk3:TCheckbox;Chk4:TCheckbox;Chk5:TCheckbox;Chk6:TCheckbox;
i : integer;
count : integer;
name : string;
rune1 : string;rune2 : string;rune3 : string;rune4 : string;rune5 : string;rune6 : string;

begin
ListBox1.Items.Clear;
RuneIni:=TIniFile.create(ExtractFilePath(ParamStr(0))+'runewords.ini');
count:=RuneIni.ReadInteger('config','count',0);
for i:=1 to count do
 begin
rune1:=RuneIni.ReadString(intToStr(i),'rune1','');
rune2:=RuneIni.ReadString(intToStr(i),'rune2','');
rune3:=RuneIni.ReadString(intToStr(i),'rune3',''); if rune3='' then rune3:=rune2;
rune4:=RuneIni.ReadString(intToStr(i),'rune4',''); if rune4='' then rune4:=rune2;
rune5:=RuneIni.ReadString(intToStr(i),'rune5',''); if rune5='' then rune5:=rune2;
rune6:=RuneIni.ReadString(intToStr(i),'rune6',''); if rune6='' then rune6:=rune2;
name:=RuneIni.ReadString(intToStr(i),'name','');

 Chk1:=TCheckbox(FindComponent('rune'+rune1));
 Chk2:=TCheckbox(FindComponent('rune'+rune2));
 Chk3:=TCheckbox(FindComponent('rune'+rune3));
 Chk4:=TCheckbox(FindComponent('rune'+rune4));
 Chk5:=TCheckbox(FindComponent('rune'+rune5));
 Chk6:=TCheckbox(FindComponent('rune'+rune6));
 if Chk1.Checked and Chk2.Checked and Chk3.Checked and Chk4.Checked and Chk5.Checked and Chk6.Checked then ListBox1.AddItem(Name,Listbox1);
 end;
 RuneIni.Free;
end;


und das hier ist die ini datei die ich zum testen genommen hab...

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:
[config]
count=2

[1]
name=Kein Plan
type=weapons only
info=only hc ladder
rune1=Tir
rune2=El
rune3=Sol
rune4=Ber
rune5=Tal
rune6=Ort
stat01=bla stat 01
stat02=bla stat 02
stat03=bla stat 03
stat04=bla stat 04

[2]
name=Enigma
type=armors only
info=only hc ladder
rune1=Jah
rune2=Ith
rune3=Ber
rune4=
rune5=
rune6=
stat01=bla stat 01424
stat02=bla stat 02442144
stat03=bla stat 0344124
stat04=bla stat 044214421


ich hoffe das es jetzt mal richtig verständlich is...
und es tut mir leid das ich zuerst für so eine allgemeine verwirrung gesorgt hab :oops:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 08.01.05 23:29 
Moin!

Ahhhhh, die Sonne geht auf... warum hast du das nicht gleich gesagt... :wink: Jetzt ist auch alles klar!

Nun, ich persönlich würde es zwar anders lösen, aber es ist ja auch dein Programm.

Vorschlag:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if Chk1.Checked and 
   Chk2.Checked and
   Chk3.Checked and
   Chk4.Checked and
   Chk5.Checked and
   Chk6.Checked then
  ListBox1.AddItem(Name,TObject(i));

Du hast da die Listbox selbst nochmal übergeben, warum weiss ist nicht, vermutlich du auch nicht, oder? :wink: Wenn du da aber den Index des Runenwortes aus der INI einträgst, kannst du in der Ereignisbehandlung für den Listbox-Klick wieder den Index des Runenwortes ermitteln und damit auch wieder die korrekte Section in der INI auffinden:
ausblenden Delphi-Quelltext
1:
i := Integer(LixtBox1.Items.Objects[ListBox1.ItemIndex]);					

Damit hast du in "i" wieder die Section und kannst passend lesen.

Alles klar?

cu
Narses
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Sa 08.01.05 23:33 
ahhh jex is auch mir die sonne aufgegangen...
naja bin halt selber noch vollnewbie mit delphi ;D

und du hattest recht...ich wusste selbst nich so genau wieso ich die box selbst nocheinmal übergeben hab...
ich denke das wars dann...
thx nochma =)