fixed StringArray erzeugen

Anfängerfragen zum Programmieren mit PureBasic.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

fixed StringArray erzeugen

Beitrag von SBond »

Hi leute,

wie kann in einem StringArray die Stringlänge festlegen?

Code: Alles auswählen

Structure irgendwas
	Wert_1.s{20}				; das geht
	Array Werte_A.s(20)			; das geht auch
	Array Werte_A.s(20){20}		; das geht nicht
EndStructure
lg
Sbond

__________________________________________________
Code-Tags hinzugefügt
09.12.2013
RSBasic
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: fixed StringArray erzeugen

Beitrag von Bisonte »

Mir nicht wirklich bekannt. Aber vielleicht einen kleinen Array Ersatz basteln mit Maps ?

Code: Alles auswählen

Structure struct_fixed_string
  String.s{8}
EndStructure

Structure irgendwas
  Map Werte.struct_fixed_string()
EndStructure

Global Test.irgendwas

Macro Werte_A(ArrayNr)
  Werte(Str(ArrayNr))\String
EndMacro

For i = 0 To 20
  Test\Werte(Str(i))\String = Str(i) +". Das ist ein Langer String"
Next i

Debug Test\Werte(Str(3))\String ; <- ohne Macro

Debug Test\Werte_A(4) ; <- Mit Macro
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: fixed StringArray erzeugen

Beitrag von Derren »

Mit ein bisschen rumprobieren hättest du es bestimmt auch allein geschafft ;)
Einfach {} und () vertauschen.

Code: Alles auswählen

Structure irgendwas
  Wert_1.s{20} ; das geht
  Array Werte_A.s(20) ; das geht auch
  Array Werte_B.s{20}(20) ; das geht ^^
EndStructure
Signatur und so
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: fixed StringArray erzeugen

Beitrag von SBond »

oh mann.... :)
super!

Ich dussel hätte es wirklich mal drehen müssen.
Was mich allerdings wundert, dass:

Code: Alles auswählen

Debug SizeOf(irgendwas)

nun 4 ausgibt, anstatt 400

Ich habe vor über eine TCP/IP-Verbindung eine Struktur als Payload zu verschicken. Da ich mit dynamischen Stringlängen eventuell Probleme bekommen würde, war die Idee, dass ich feste Stringlängen definiere. Bei einzelnen Strings geht das wunderbar und SizeOf() gibt mit die korrekte Byte-größe der Struktur an. Wenn jetzt das Array mit in der Struktur ist, dann gibt SizeOf() nur die Größe des Arraytyps aus.

Kann man die Gesamtgröße der Struktur inklusive Arrays ausgeben?

Beispiel (als ASCII kompiliert):

Code: Alles auswählen

Structure irgendwas
	Wert_1.i
	Wert_2.i
	String.s{40}
 	Array Werte_B.s{20}(20)
EndStructure
 
Debug SizeOf(irgendwas)
Debug gibt 52 aus (4+4+40+4), aber die tatsächliche Größe ist 448 Byte (4+4+40+20*20)

gibt es in Purebasic einen Befehl, den ich ggf übersehen haben könnte?
SizeOf() scheint nicht das richtige zu sein


lg
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: fixed StringArray erzeugen

Beitrag von HeX0R »

Wenn Dein Array eh eine fixe Anzahl Elemente hat, mach es lieber so:

Code: Alles auswählen

Structure irgendwas
   Wert_1.i
   Wert_2.i
   String.s{40}
   Werte_B.s{20}[20]
EndStructure
 
Debug SizeOf(irgendwas)
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: fixed StringArray erzeugen

Beitrag von SBond »

vielen vielen Dank :)

jetzt passt alles :mrgreen:
was würde ich nur ohne euch machen ^^

viele Grüße
SBond ^^
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: fixed StringArray erzeugen

Beitrag von NicTheQuick »

Das das hier 20 Werte sind, ist eh nicht ganz korrekt:

Code: Alles auswählen

Structure irgendwas
   Wert_1.i
   Wert_2.i
   String.s{40}
    Array Werte_B.s{20}(20)
EndStructure
 
Debug SizeOf(irgendwas)
In Wirklichkeit hat dieses Array nämlich 21 Elemente, von 0 bis 20.
Während dieses hier wirklich nur 20 Element hat:

Code: Alles auswählen

Structure irgendwas
   Wert_1.i
   Wert_2.i
   String.s{40}
   Werte_B.s{20}[20]
EndStructure
Das ist eine komische Eigenart von Purebasic, aber man gewöhnt sich dran.
Antworten