Aktuelle Zeit: 15.10.2018 16:36

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 16.05.2018 10:56 
Offline

Registriert: 08.03.2009 16:08
Hallo,
ich mache mit pb viele kleine einfache Progrämmchen, die irgendwelche Daten auswerten. Das geht schnell, macht Spaß und ist hilfreich, aber als Programierer bin ich eine Niete. Daher weiß ich nicht:

Ich habe mehrere strukturierte Listen mit den gleichen Strukturen, aber unterschiedlichem Inhalten, das muss auch so sein. Die Listen sollen durch die selben Prozeduren verarbeitet werden. Also muss ich den Prozeduren klarmache, welche Liste sie verarbeiten sollen.

Code:
OpenConsole()

Structure test
  a.s
  b.s
EndStructure

NewList testlist1.test()
AddElement(testlist1())
testlist1()\a = "Liste 1 a"
testlist1()\b = "Liste 1 b"

NewList testlist2.test()
AddElement(testlist2())
testlist2()\a = "Liste 2 a"
testlist2()\b = "Liste 2 b"

Procedure showtest(List testlist1.test())  ;<= Hier sollen beide Listen verarbeitet werden können
  PrintN(testlist1()\a)       ;<= hier soll auch die testlist2 ausgeworfen werden können
  PrintN(testlist1()\b)
 EndProcedure

;

showtest(testlist1.test()) ; Hier will ich auch testlist2.test übergeben können
;showtest(irgendeineliste.test()) ???

Input()


Wie mache ich dass, das ich showtest() auch testlist2 übergeben kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 16.05.2018 11:01 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Es ist doch schon alles richtig. Du musst jetzt nur
Code:
showtest(testlist2())
schreiben.

Vielleicht solltest du den Parameter in der Prozedur anders nennen, damit es nicht zu Verwirrungen kommt:
Code:
Procedure showtest(List inList.test())  ;<= Hier sollen beide Listen verarbeitet werden können
   PrintN(inList()\a)               ;<= hier soll auch die testlist2 ausgeworfen werden können
   PrintN(inList()\b)
EndProcedure

Übrigens musst du das ".test" nur beim definieren der Liste angeben. Danach nie wieder. Das ist auch praktischer, falls du die Struktur mal ändern willst. Dann musst du es nämlich an viel weniger Stellen ändern.

Damit deine Prozedur auch immer funktioniert, solltest du darauf achten, dass immer ein Element in der Liste aktiv ist, oder du iterierst gleich über die Liste:
Code:
Procedure showtest(List inList.test())
   ForEach inList()
      PrintN(inList()\a)
      PrintN(inList()\b)
   Next
EndProcedure

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 16.05.2018 12:10 
Offline

Registriert: 08.03.2009 16:08
Vielen Dank! Das ist so trivial, kein Wunder, dass ich nicht darauf gekommen bin ;-) Das hilft mir schon einmal weiter.

Eigentlich hatte ich mir aber eher soetwas vorgestellt:

If a = 1
liste = testliste1()
else
liste = testliste2()
endif

machedasmit(liste())
machediesmit(liste())
.
.
.

Sonst muss ich ja die Prozedurenaufrufe immer neu für jede Liste schreiben. Läßt sich das vermeiden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 16.05.2018 12:19 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Du kannst leider nicht so einfach einen Alias für eine Liste erstellen. Du könntest deine Listen aber in ein Array packen.
Code:
OpenConsole()

Structure test
   a.s
   b.s
EndStructure

Structure Liste
   List l.test()
EndStructure

Dim liste.Liste(1)

AddElement(liste(0)\l())
liste(0)\l()\a = "Liste 0 a"
liste(0)\l()\b = "Liste 0 b"

AddElement(liste(1)\l())
liste(1)\l()\a = "Liste 1 a"
liste(1)\l()\b = "Liste 1 b"


Procedure showtest(List inList.test())
   ForEach inList()
      PrintN(inList()\a)
      PrintN(inList()\b)
   Next
EndProcedure

Repeat
   Print("Welche Liste? [0/1] ")
   useList = Val(Input())
Until useList = 0 Or useList = 1


showtest(liste(useList)\l()) ; Hier will ich auch testlist2.test übergeben können
                     ;showtest(irgendeineliste.test()) ???

Input()

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 16.05.2018 14:52 
Offline

Registriert: 08.03.2009 16:08
Das sieht wie eine Lösung aus. Nochmals vielen Dank!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 16.05.2018 15:24 
Online
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
ohne irgendwas zu testen

select a
case 1: machedasmit(testliste1())
case 2: machediesmit(testliste2())
case 3: ;usw.
default: ;machediesmit(baseliste()) oder explodiere
endselect

_________________
Purebasic 5.60 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Unterschiedliche Listen an Proceduren übergeben
BeitragVerfasst: 17.05.2018 01:31 
Offline
Benutzeravatar

Registriert: 22.02.2008 20:49
Wohnort: Utah, USA
NicTheQuick hat geschrieben:
Du kannst leider nicht so einfach einen Alias für eine Liste erstellen. Du könntest deine Listen aber in ein Array packen.

Auch mit einem Zeiger:
Code:
OpenConsole()

Structure test
   a.s
   b.s
EndStructure

Structure Liste
   List l.test()
EndStructure

Dim liste.Liste(1)

AddElement(liste(0)\l())
liste(0)\l()\a = "Liste 0 a"
liste(0)\l()\b = "Liste 0 b"

AddElement(liste(1)\l())
liste(1)\l()\a = "Liste 1 a"
liste(1)\l()\b = "Liste 1 b"


Procedure showtest(List inList.test())
   ForEach inList()
      PrintN(inList()\a)
      PrintN(inList()\b)
   Next
EndProcedure

Define *Liste.Liste
Repeat
   Print("Welche Liste? [0/1] ")
   useList = Val(Input())
Until useList = 0 Or useList = 1
 
*Liste = liste(useList)\l()
showtest*Liste\l())

Input()

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye