Seite 1 von 1

Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 03:23
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

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 03:47
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

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 05:31
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

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 09:34
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

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 09:47
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

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 11:00
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.

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 11:20
von Kiffi
Danilo hat geschrieben:Das ist allerdings nur ein readonly Iterator.
ich bezog mich auf Darkelfs dritte Frage.

Grüße ... Kiffi

Re: Ein paar Fragen zum Einstieg

Verfasst: 09.12.2011 15:05
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