Xojo Developer Conference
25/27th April 2018 in Denver.
MBS Xojo Conference
6/7th September 2018 in Munich, Germany.

Listbox auswerten (Real Studio network user group Deutschland Mailinglist archive)

Back to the thread list
Previous thread: Toolbuttons
Next thread: ASCII Werte


AW: RB Programme unter Jaguar   -   gerhard queisser
  Listbox auswerten   -   Pepe
   Re: Listbox auswerten   -   Christian Schmitz
    Re: Listbox auswerten   -   Pepe
     Re: Listbox auswerten   -   Christian Schmitz
      Re: Listbox auswerten   -   Pepe

Listbox auswerten
Date: 02.08.02 11:55 (Fri, 2 Aug 2002 12:55:24 +0200)
From: Pepe
Hallo Leute,

verdammt blöde Sache, an der ich grad zu knabbern habe. V.a., weil die
Lösung wahrscheinlich sehr einfach ist.

Also zum Problem: ich habe eine Listbox, und in der Spalte 1 befinden
sich Zahlen. Man muss sich Spalte 1 also ungefähr so vorstellen:

12
8
6
7
9
1
0

Wie ihr seht, sind in Spalte 1 Zahlen untergebracht. Und zwar
unterschiedliche Zahlen. Man wird niemals zweimal eine Zahl, also zum
Beispiel zweimal die 12 in dieser Spalte finden.

Meine Aufgabe ist nun, Spalte 1 komplett zu durchsuchen und die
niedrigste Zahl zu finden, die noch nicht in Spalte 1 existiert. Beim
obigen Beispiel wär das also 2, da 0 und 1 schon existieren.
Wichtig: ich darf die Spalte nicht mit headingindex ordnen! Die Spalte
ist und bleibt wie sie ist.

Ich dachte da an folgendes:

n=0
for i=0 to Listbox1.listcount-1
if not(val(Listbox1.cell(i,1))=n) then
gesuchterWert=n
exit
else
n=n+1
end if
next

Ich glaube, der Fehler liegt darin, dass nicht erst die ganze Spalte der
Listbox durchsucht wird, sondern die nächstbeste, passende Zeile der
Spalte verwendet wird. Um ehrlich zu sein: ich bin momentan zu
durcheinander, um mich überhaupt konzentrieren zu können... 8-) ...

Wenn also jemand Erbarmen mit mir hat und mir zeigt, wie's geht, wär ich
sehr dankbar.

Gruss,
Pepe

- - - - - - - - - -
For list commands, send "Help" in the body of a message to
<<email address removed>>

Re: Listbox auswerten
Date: 02.08.02 12:43 (Fri, 2 Aug 2002 13:43:27 +0200)
From: Christian Schmitz
> Wenn also jemand Erbarmen mit mir hat und mir zeigt, wie's geht, wär ich
> sehr dankbar.

Wenn du dafür genug RAM hast:

dim i,c,n,found as integer
dim b(0) as boolean

c=listbox.listcount-1
redim b(c)
for i=0 to c
n=val(listbox.cell(i,0))
b(n)=true
next

found=-1
for i=0 to c
if not b(i) then // frei
found=i
exit
end if
next

Mfg
Christian

--

Re: Listbox auswerten
Date: 02.08.02 16:16 (Fri, 2 Aug 2002 17:16:58 +0200)
From: Pepe
Hallo Leute,

Christian, erstmal danke für deine Antwort.

Am Freitag den, 2. August 2002, um 13:43, schrieb Christian Schmitz:

>> Wenn also jemand Erbarmen mit mir hat und mir zeigt, wie's geht, wär
>> ich
>> sehr dankbar.
>
> Wenn du dafür genug RAM hast:
>
> dim i,c,n,found as integer
> dim b(0) as boolean
>
> c=listbox.listcount-1
> redim b(c)
> for i=0 to c
> n=val(listbox.cell(i,0))
> b(n)=true

Na ja, das ist aber etwas gefährlich! Sagen wir, die Liste beinhaltet
drei Zeilen. Die Zahlen in den Zeilen sind 0, 1 und 8. Dann hast du in
deiner obigen letzten Zeile b(8)=true. Da wird das Ganze sauber mit
einer UnhandledOutOfBounds Exception abrauchen, da du drei Zeilen vorher
noch redim b(3) hattest (3 Einträge).

> next
>
> found=-1
> for i=0 to c
> if not b(i) then // frei
> found=i
> exit
> end if
> next
>
> Mfg
> Christian

Dennoch ist das natürlich ein guter Vorschlag. Ich habe bisher viel
rumprobiert, und scheine jetzt dank deiner Hilfe endlich was handfestes
zu haben. Wie gefällt euch das:

ausser b(0) as boolean sind alle anderen Werte integer

c=listbox1.listcount-1
redim b(c)
for i=0 to c
n=val(listbox1.cell(i,1))
if n>c then
redim b(n)
else
end if
b(n)=true
next

k=0 //wenn die Liste noch leer ist!
for i=0 to c
if not b(i) then // frei
k=i
exit
else
k=c+1
end if
next

Christian, du hasttest angesprochen, dass das viel RAM braucht. Ich gehe
davon aus, dass diese Listbox nicht mehr als 100, 200 Einträge haben
wird. Allerdings ist die Anzahl der Spalten sehr hoch, was hier
allerdings nix zur Sache tun sollte. X sollte das selbständig regeln,
aber wie hoch sollte der Speicher für die kompilierte Classic-Version
sein (v.a. wenn die ganze App noch viel mehr solcher Sachen beinhaltet)?

Danke,
Grüsse,

Pepe

- - - - - - - - - -
For list commands, send "Help" in the body of a message to
<<email address removed>>

Re: Listbox auswerten
Date: 02.08.02 17:54 (Fri, 2 Aug 2002 18:54:59 +0200)
From: Christian Schmitz
> Hallo Leute,
>
> Na ja, das ist aber etwas gefährlich! Sagen wir, die Liste beinhaltet
> drei Zeilen. Die Zahlen in den Zeilen sind 0, 1 und 8. Dann hast du in
> deiner obigen letzten Zeile b(8)=true. Da wird das Ganze sauber mit
> einer UnhandledOutOfBounds Exception abrauchen, da du drei Zeilen vorher
> noch redim b(3) hattest (3 Einträge).

Ok. Da hast du recht.

> if n>c then
> redim b(n)
> else

Die Zeile mit dem Else kannst du löschen.

> k=0 //wenn die Liste noch leer ist!
> for i=0 to c
> if not b(i) then // frei
> k=i
> exit
> else
> k=c+1

Das hier bei Else ist wohl nicht so gut.

>
> Christian, du hasttest angesprochen, dass das viel RAM braucht.

Boolean = 1 bit in Arrays.
(sonst 4 Byte)

Folglich brauchst du für maximal 2 Milliarden Einträge 256 MB RAM...

Mfg
Christian

--
A

Re: Listbox auswerten
Date: 02.08.02 18:11 (Fri, 2 Aug 2002 19:11:26 +0200)
From: Pepe
Hallo Christian&Co.,

Am Freitag den, 2. August 2002, um 18:54, schrieb Christian Schmitz:

>> k=0 //wenn die Liste noch leer ist!
>> for i=0 to c
>> if not b(i) then // frei
>> k=i
>> exit
>> else
>> k=c+1
>
> Das hier bei Else ist wohl nicht so gut.

Du meinst das k=c+1?
Verbesserungsvorschlag?
Ich geh' halt davon aus, dass - wenn b(i) immer true ist - die Zahlen
exakt mit der Anzahl der Zeilen übereinstimmen. Also bei 12 Zeilen wären
dann Nummern von 0 - 11 vorhanden. Deswegen erhöhe ich einfach
listbox.listcount -1 um eins und habe somit die nächsthöhere freie
Zahl - in diesem Fall die 12.

>> Christian, du hasttest angesprochen, dass das viel RAM braucht.
>
> Boolean = 1 bit in Arrays.
> (sonst 4 Byte)
>
> Folglich brauchst du für maximal 2 Milliarden Einträge 256 MB RAM...

Also im Klartext ist das für eine "gewöhnliche" Shareware-App (nie mehr
als 1000 Zeilen bei mir, sag ich mal) nicht von Belang? Ich gebe lieber
etwas mehr Speicher als zuwenig. Aber übertreiben muss man's wohl wegen
sowas auch nicht...

Gruss & Dank,
Pepe

- - - - - - - - - -
For list commands, send "Help" in the body of a message to
<<email address removed>>