Types aussotieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

dominik

Betreff: Types aussotieren

BeitragSa, Dez 17, 2005 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will das doppelte Einträge aussotieren werden(natürlich nur einmal), so das jeder Eintrag noch genau einmal vorhanden ist.
Hab ich da nen Logikfehler drinn?

BlitzBasic: [AUSKLAPPEN]
  Local vorhanden = False

For weitere.links = Each links
nenner$ = weitere\verweise$
For weitere.links = Each links
If weitere\verweise$ = nenner$ And vorhanden = True Then Delete weitere.links
If weitere\verweise$ = nenner$ Then vorhanden = True
Next
vorhanden = False
Next
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
  • Zuletzt bearbeitet von dominik am Di, Dez 20, 2005 16:14, insgesamt einmal bearbeitet
 

CodeMaster

BeitragSa, Dez 17, 2005 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast zwei verschachtelte Schleifen, in denen deine Indexvariable "weitere" heißt. Außerdem muss das Löschen eines Types immer zum Schluss passieren, um zu verhindern, dass man nach dem Löschen noch einmal auf die nicht mehr existente Instanz zugreift, was zu einem Fehler führt.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

dominik

BeitragSa, Dez 17, 2005 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich aber BlitzBasic: [AUSKLAPPEN]
If weitere\verweise$ = nenner$ Then vorhanden = True

vor
BlitzBasic: [AUSKLAPPEN]
If weitere\verweise$ = nenner$ And vorhanden = True Then Delete weitere.links

setze dann wird alles gelöscht weil er schon beim ersten mal sofort vorhanden auf true setzt und dann auch den ersten Eintrag löscht was ja aber eben nicht passieren soll.
Wenn der Inhalt zum erstenmal gefunden wird soll er bestehen bleiben.(von mir aus auch der letzte, is mir wurst welcher, aber wie willste des machen???)

Bei zwei for next schleifen die beide den gleichen zähler hab ich bisher noch nie probs bekommen. die werden von BB automatisch erkannt.
Sonst würd ja auch ne Fehlermeldung kommen.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Dez 17, 2005 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde das ganz anders angehen!

Meine erste Lösung wären 2 For Schleifen....
BlitzBasic: [AUSKLAPPEN]
For a1.Typ = Each Typ
For a2.Typ = Each Typ
If a1 <> a2 Then
If a1\x = a2\x Then
Delete a2
End If
End If
Next
Next


Allerdings wird hier doppelt so oft veglichen wie nötig!
Die Zweite Lösung kommt noch....
[BB2D | BB3D | BB+]

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Dez 17, 2005 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
For a1.Typ = Each Typ
a2.Typ = After a1
While a2 <> Null
If a1\x = a2\x Then
Kill.Typ = a2
a2 = Before Kill
Delete Kill
End If
a2 = After a2
Wend
Next

sieht komplizierte aus als es ist!
aber das ist die schnellere Version....
[BB2D | BB3D | BB+]

dominik

BeitragSo, Dez 18, 2005 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, bsp. 2 funtzt perfekt, auch wenn ich des mit dem kill.typ noch nicht 100% geblickt hab. (Sinn und Wirkung)
Muss mich morgen da nochmal nen bischen vertiefen, bin grad zu müde.

Also bsp. 1 sieht meinem doch seeehr ähnlich, oder irr ich da?

Kannst du mir auch erklären warum meins so net funtzt? Liegts also doch an den doppelten var namen?
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Dez 19, 2005 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem Kill Typ ist ganz einfach,
Ich brauche einen Zeiger zum löschen des Typs!
Denn wenn ich sofort den a2 löschen würde, kann ich nicht a2 after a2 setzten da a2 =Null ist!
[BB2D | BB3D | BB+]
 

CodeMaster

BeitragMo, Dez 19, 2005 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann deine Aussage mit der funktionierenden Verschachtelung mit selben Indexvariablen nicht nachvollziehen. Das BeispielBlitzBasic: [AUSKLAPPEN]
For i = 1 To 3
For i = 1 To 3
For i = 1 To 3
For i = 1 To 3
Print i
Next
Print i
Next
Print i
Next
Print i
Next
Print i
bringt bei mir folgende Aussage:Zitat:
1
2
3
4
5
6
7

Was ja auch halbwegs logisch ist. Das entspricht allerdings nicht deiner Beobachtung. Genauso verhält es sich auch bei Types.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

Ctuchik

BeitragMo, Dez 19, 2005 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Normalerweise, d.h. mit verschiedenen Indexvariablen wird aber die innerste Schleife 81 mal durchlaufen.

Bei deiner Konstruktion wird die innere Schleife durchlaufen, danach ist i = 4.
Dann wird jeweils nur noch das print i aus den anderen Schleifen ausgeführt und beim Next i um 1 erhöht. Daher läuft es noch bis 7 weiter.
Natürlich funktionieren deine Schleifen, aber sie sind einfach komplett sinnfrei.
Bei Types würde die innere Schleife durchlaufen, danach wäre der Type Null.

Probier mal das hier: Wink
BlitzBasic: [AUSKLAPPEN]

For i=1 To 5
For i=1 To 3
If KeyHit(1) Then End
Print i
Next
Next

Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Dez 19, 2005 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs mal ausprobiert mit
BlitzBasic: [AUSKLAPPEN]
Type typ Field x End Type

For t = 1 To 3
s.typ = New typ
Next

For a1.typ = Each typ
i = i + 1000
Print i
For a1.typ = Each typ
i = i + 1
Print i
Next
Next
WaitKey


Wie erwartet : Es geht nicht!!!

Memory access v...
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group