Ein paar Fragen zum Einstieg

Anfängerfragen zum Programmieren mit PureBasic.
Darkelf
Beiträge: 3
Registriert: 08.12.2011 21:44

Ein paar Fragen zum Einstieg

Beitrag von Darkelf »

Hallo zusammen,

mein Name ist Tom und ich bin vor ein paar Tagen eher zufällig auf PureBasic gestoßen.
Ich habe bislang die Demoversion und versuche mir gerade einen Überblick über die Sprache zu verschaffen. Allerdings bin ich mir auch nach dieser kurzen Zeit schon recht sicher, dass ich mir die Vollversion von PureBasic kaufen werde.
Ich beherrsche bereits mehrere Programmiersprachen (Schwerpunkt C++ und Python) und programmiere auch beruflich bei einer Softwarefirma in Hessen. Ich vermute, ich bin also eher den umgekehrten Weg gegangen (ich habe gelesen, dass viele PureBasic als Einstiegssprache wählen und später umsteigen). Ich mag an PB sehr, dass der Compiler derart kleine Executables produziert. Ich habe ein fertiges Kompilat mal in Olly geöffnet und dabei festgestellt, dass so gut wie kein Overhead (in ASM) vorhanden ist. Ich stehe extrem auf speichereffiziente Sachen :allright:
Ich habe allerdings gerade 2 - 3 Fragen, auf die ich in der Doku (hab sie nicht ganz gelesen - der Job ist manchmal echt hinderlich :wink: ) noch keine Antwort gefunden habe.
Meine erste Frage betrifft Strings. Ich würde gerne wissen, ob in PB der direkte Zugriff auf einzelne Chars in einem String möglich ist. Also wenn ich z.B. einen String habe: test.s = "ABCDEFG", gibt es dann in etwa sowas: test2.a = test[2]?
test2 sollte dann ein 'C' enthalten. Umgekehrt halt auch eine direkte Zuweisung: test[2] = 'Z' - der String sähe danach so aus: "ABZDEFG". Geht sowas mit PB?
Die zweite Frage betrifft Arrays und Listen. Ich würde gerne wissen, ob man Arrays und Listen beim deklarieren gleich initialisieren kann? Wenn ich also beispielsweise ein Array mit 100 Integer habe, würde ich es gerne gleich initialisieren. Also in der Art:
{0,1,2,3,4,5,6,...,99} Wieder die Frage, geht das mit PB?
Und noch eine dritte Frage, die wieder Strings betrifft. Kann man in PureBasic über Strings iterieren?

Ich bedanke mich schon mal im voraus für eure Mühe.

Gruß
Tom
Ramihyn_
Beiträge: 61
Registriert: 20.06.2007 10:56

Re: Ein paar Fragen zum Einstieg

Beitrag von Ramihyn_ »

Hallo Tom und willkommen im PureBasic Forum :)
Darkelf hat geschrieben:Ich beherrsche bereits mehrere Programmiersprachen (Schwerpunkt C++ und Python) und programmiere auch beruflich bei einer Softwarefirma in Hessen. Ich vermute, ich bin also eher den umgekehrten Weg gegangen (ich habe gelesen, dass viele PureBasic als Einstiegssprache wählen und später umsteigen).
Ich bin auch den "umgekehrten" Weg gegangen. Beruflich benutze ich meist C#, C oder C++, hab aber auch noch alte Software in Pascal die ich supporte ;)
Darkelf hat geschrieben:Meine erste Frage betrifft Strings. Ich würde gerne wissen, ob in PB der direkte Zugriff auf einzelne Chars in einem String möglich ist. Also wenn ich z.B. einen String habe: test.s = "ABCDEFG", gibt es dann in etwa sowas: test2.a = test[2]?
test2 sollte dann ein 'C' enthalten. Umgekehrt halt auch eine direkte Zuweisung: test[2] = 'Z' - der String sähe danach so aus: "ABZDEFG". Geht sowas mit PB?
Dafür wäre der Mid() Befehl zuständig. Es gibt Left/Mid/Right und generell kann man sagen, dass das String Handling eher zu den Stärken von PureBasic gehört.
Darkelf hat geschrieben:Die zweite Frage betrifft Arrays und Listen. Ich würde gerne wissen, ob man Arrays und Listen beim deklarieren gleich initialisieren kann? Wenn ich also beispielsweise ein Array mit 100 Integer habe, würde ich es gerne gleich initialisieren. Also in der Art:
{0,1,2,3,4,5,6,...,99} Wieder die Frage, geht das mit PB?
Die Frage überlasse ich jemand anderem, meine Lösung wäre per 'Data' und dann einfach durch Restore/Read einlesen. Aber das ist natürlich nicht so komfortabel wie Auto-Initialisierung bei anderen Sprachen.
Darkelf hat geschrieben:Und noch eine dritte Frage, die wieder Strings betrifft. Kann man in PureBasic über Strings iterieren?
Da würde ich eine Liste vorschlagen mit dem Typ .s (Strings). Iteriert würde dann mit dem ForEach Befehl:

Code: Alles auswählen

ForEach MeineListe()

... innere Schleife die jedes MeineListe() Element einzeln verarbeitet ...

Next
Einfacher gehts wirklich kaum :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Ein paar Fragen zum Einstieg

Beitrag von ts-soft »

Darkelf hat geschrieben: Meine erste Frage betrifft Strings. Ich würde gerne wissen, ob in PB der direkte Zugriff auf einzelne Chars in einem String möglich ist. Also wenn ich z.B. einen String habe: test.s = "ABCDEFG", gibt es dann in etwa sowas: test2.a = test[2]?
test2 sollte dann ein 'C' enthalten. Umgekehrt halt auch eine direkte Zuweisung: test[2] = 'Z' - der String sähe danach so aus: "ABZDEFG". Geht sowas mit PB?
Die etwas andere (schnellere Lösung): <)

Code: Alles auswählen

EnableExplicit

Structure SArray
  char.c[0]
EndStructure

Define.s Str = "ABCDEFG"
Define *pStr.SArray = @Str
Debug Str
Debug Chr(*pStr\char[2])
Debug "..."
*pStr\char[2] = 'Z'
Debug Str
Debug Chr(*pStr\char[2])
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Ein paar Fragen zum Einstieg

Beitrag von Danilo »

Darkelf hat geschrieben:Und noch eine dritte Frage, die wieder Strings betrifft. Kann man in PureBasic über Strings iterieren?
Nein. Muß man wieder alles selbst machen.

Code: Alles auswählen

test.s = "ABCDEFG"

;------------------------------
For i = 0 To Len(test)-1
    Debug PeekC(@test + i*SizeOf(Character))
Next
;------------------------------
*p1.Character = @test
While *p1\c
    Debug *p1\c
    *p1+SizeOf(Character) ; achtung, verändert *p1
Wend
;------------------------------
Structure SArray
  char.c[0]
EndStructure

*p2.SArray = @test
For i = 0 To Len(test)-1
    Debug *p2\char[i]
Next
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ein paar Fragen zum Einstieg

Beitrag von Kiffi »

und hier die unspektakuläre Iteration im Basic-Style:

Code: Alles auswählen

test.s = "ABCDEFG"
StringLength = Len(test)
For Counter = 1 To StringLength
  Debug Mid(test, Counter, 1)
Next
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Ein paar Fragen zum Einstieg

Beitrag von Danilo »

Kiffi hat geschrieben:und hier die unspektakuläre Iteration im Basic-Style:

Code: Alles auswählen

test.s = "ABCDEFG"
StringLength = Len(test)
For Counter = 1 To StringLength
  Debug Mid(test, Counter, 1)
Next
Das ist allerdings nur ein readonly Iterator.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ein paar Fragen zum Einstieg

Beitrag von Kiffi »

Danilo hat geschrieben:Das ist allerdings nur ein readonly Iterator.
ich bezog mich auf Darkelfs dritte Frage.

Grüße ... Kiffi
a²+b²=mc²
Darkelf
Beiträge: 3
Registriert: 08.12.2011 21:44

Re: Ein paar Fragen zum Einstieg

Beitrag von Darkelf »

Wow, DAS nenn' ich mal ein engagiertes Board (bzw. eine engagierte Community).

Vielen Dank für eure Antworten. Damit kann ich was anfangen.
Und jetzt steht es fest: ich kauf mir die Vollversion!
Die schöne Sprache plus so 'ne Community - das ist das Geld auf jeden Fall wert.
Ich hoffe, ich kann mich hier schon bald nützlich einbringen.

Danke nochmal.

Gruß
Tom
Antworten