Seite 3 von 4

Verfasst: 04.07.2006 21:37
von mk-soft
Ich habe in Purbasic noch kein Spiel Programmiert. Nur Serverdienste, Langzeit Datenerfassung, Datenbankenkonvertiereung. etc.
Allso nichts universell einsetzbares

Verfasst: 05.07.2006 07:18
von #NULL
ich finde kaeru's erster ansatz ist der treffenste, und für grosse arrays geht's ja auch noch so

Code: Alles auswählen

Dim s.s(5)
For i=0 To 5 : Read s(i) : Next

DataSection
    Data.s "wie", "macht", "man", "das", "in", "PureBasic" 
EndDataSection
ts' methode mit stringField ist ja nur zum lesen zu gebrauchen, nicht zum schreiben, aber man könnte sie auch zum initialisieren des string arrays verwenden(stringField-macro anstatt dataSection).

Verfasst: 05.07.2006 07:58
von helpy
In C (im ersten Beitrag) geht es doch um ein Pointer-Array auf String-Konstanten, oder irre ich mich da.

Ein String-Array in PureBasic entspricht diesem Pointer-Array! Vorteil ist, dass ich in PB sehr leicht auf die Strings zugreifen kann, weil das Array den Datentyp String hat. Mit dem Read aus einer DataSection wird jedoch eine Kopie der Strings angelegt.

Wem ein Pointer-Array auf die Strings in der DataSection reicht, kann das auch so machen:

Code: Alles auswählen

Dim *tex_name.Character(5)
*tex_name(0) = ?tex_data
For i=1 To 5
	*tex_name(i) = *tex_name(i-1) + MemoryStringLength(*tex_name(i-1))+1
Next

For i=0 To 5
	Debug *tex_name(i)
	Debug PeekS(*tex_name(i))
Next


DataSection
	tex_data:
    Data.s "wie", "macht", "man", "das", "in", "PureBasic"
EndDataSection 
cu, helpy


Nachtrag: Damit's auch für Unicode funktioniert:

Code: Alles auswählen

Dim *tex_name.Character(5)
*tex_name(0) = ?tex_data
For i=1 To 5
	*tex_name(i) = *tex_name(i-1) + MemoryStringLength(*tex_name(i-1)) + SizeOf(Character)
Next

For i=0 To 5
	Debug *tex_name(i)
	Debug PeekS(*tex_name(i))
Next


DataSection
	tex_data:
    Data.s "wie", "macht", "man", "das", "in", "PureBasic"
EndDataSection 

Verfasst: 05.07.2006 10:46
von Kaeru Gaman
@helpy

yo, man, YOU hit it! 8)

Verfasst: 05.07.2006 16:01
von DarkDragon
MVXA hat geschrieben:> Hmm ne, also das ist definitiv falsch.
Warum?

> Ich würds so wie Kaeru_Gaman lösen.
ich z.b. nich.. Wozu array mit werten laden und zeit verschwenden,
wenns schon vorher im speicher stehen kann
Warum es falsch ist? Gucks dir mal an, das gibt "acht" statt "macht" aus, weil es ja im String + 4 geht und nicht die Pointer durchgeht.

[EDIT] Mist, ein Tag zu spät.

Verfasst: 05.07.2006 16:07
von Kiffi
DarkDragon hat geschrieben:[EDIT] Mist, ein Tag zu spät.
:lol: :allright:

Verfasst: 05.07.2006 16:18
von ts-soft
>> [EDIT] Mist, ein Tag zu spät.
Hab auch schon übersehen, das ein Thread aus mehr als einer Seite besteht.. :D

Verfasst: 06.07.2006 09:33
von real
ts-soft hat geschrieben: Wieso, Kaeru hats doch gezeigt, der Rest sind ja nur alternativen

Das gilt aber nur für unflexible Programmierer!
Das (und wie) es geht habt ihr gezeigt, und dafür war das "Danke".

Das mit dem unflexiblen Programmierer überles ich mal dezent... :roll:

Verfasst: 06.07.2006 13:36
von MVXA
> Das mit dem unflexiblen Programmierer überles ich mal dezent...
Wenn man die Wahrheit nicht vertragen kann....

Verfasst: 06.07.2006 15:50
von real
Wie immer hier im Forum:
Wenn jemand (auch nur in bestimmten Teilen) an PB zweifelt oder Alternativen den Vorzug gibt werden manche persönlich. Fakt: die Definition eines simplen Arrays von Char-Pointern ist unter C einfacher als unter PB.

@ts-soft, Kaeru Gaman & MXVA:
Bin ich unflexibel, weil ich mehr als nur PB machen und C in diesem Fall bevorzuge? Oder weil ich nicht Lust habe, meine wertvolle Zeit mit der Konvertierung zu vergeuden? Ich hab wahrgenommen, dass es unter PB in verschiedenen Variationen möglich ist, aber etwas mehr Zeit in Anspruch nehmen würde, als ich investieren will.