Konvertierung von C zu PureBasic

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Nö... Warum kritisiert ihr alle meine geniale Lösung? Seid ihr neidisch
oder wie darf ich das vestehen?
Bild
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

Macro tex_name(Index)
    PeekS(?tex_name_img+(Index*4))
EndMacro

Debug tex_name(0)
Debug tex_name(1)
Debug tex_name(2)
Debug tex_name(3)
Debug tex_name(4)
Debug tex_name(5)

DataSection
    tex_name_img:
        Data.s "so", "mat", "man", "das", "in", "PureBasic"
EndDataSection
output:

Code: Alles auswählen

so
at
an
as
n
reBasic
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

an der adresse des labels liegen keine pointer zu null-terminierten strings. sondern dort liegen die strings selbst, und die brauchen jeweils so viel bytes wie sie zeichen haben, und noch eins mehr zum terminieren.(oder?)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

//Edit:
Öhm, moment mal. Das scheint ein Fehler von PureBasic zu sein.

Code: Alles auswählen

Macro tex_name(Index)
    PeekS(?tex_name_img+(Index*4))
EndMacro

Debug tex_name(0)
Debug tex_name(5)

DataSection
    tex_name_img:
        Data.s "so", "macht", "man", "das", "in", "PureBasic"
EndDataSection
Funktioniert ohne Probleme. Dein Code macht bei mir aber den selben Mist...
Bild
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

das ist zufall, weil der 0-char vor "PureBasic" bei 20 liegt, also einem vielfachen von 4 (sorry bei mir waren die strings etwas anders)

in wirklichkeit liegen die daten so vor:
so0macht0man0das0in0PureBasic0
...wenn du jetzt bei einem vielfachen von vier irgendwo einsteigst, landet er in einem beliebigen string und liest weiter bis zum ersten auftauchenden 0-char.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

stimmt.... das hab ich jetzt erst getestet. Dann ist das eher ne Limitation.
Aber einfach ein @ vor die Strings setzen und dann Data.l drauß machen
geht auch nicht, dann kommt es zu einem "assembler" fehler...

Code: Alles auswählen

---------------------------
PureBasic - Assembler error
---------------------------
PureBasic.asm [372]: 

 dd "so",0,"macht",0,"man",0,"das",0,"in",0,"PureBasic",0 

error: value out of range. 


---------------------------
OK   
---------------------------
Bild
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

Beitrag von ts-soft »

>>Öhm, moment mal. Das scheint ein Fehler von PureBasic zu sein.

Ist auch falsch, aber von Dir, müßte so aussehen:

Code: Alles auswählen

Procedure.s tex_name(Index)
  Restore tex_name_img
  For I = 1 To Index + 1
    Read Text.s
  Next
  ProcedureReturn Text
EndProcedure

For I = 0 To 5
  Debug tex_name(I)
Next

DataSection
    tex_name_img:
        Data.s "so", "macht", "man", "das", "in", "PureBasic"
EndDataSection
Da finde ich mein Macro schöner
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
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Oh Gott, nein Danke! Dann mach ich's lieber in C, wenn ich in PB nichtmal solch ein dämliches Array vordefinieren kann.

Wieder mal ein Beispiel, dass PB nicht universell einsetzbar (und praktikabel) ist.

Trotzdem vielen Dank für Eure Unterstützung! :allright:
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

Beitrag von ts-soft »

real hat geschrieben:Oh Gott, nein Danke! Dann mach ich's lieber in C, wenn ich in PB nichtmal solch ein dämliches Array vordefinieren kann.
Wieso, Kaeru hats doch gezeigt, der Rest sind ja nur alternativen
real hat geschrieben: Wieder mal ein Beispiel, dass PB nicht universell einsetzbar (und praktikabel) ist.
Das gilt aber nur für unflexible Programmierer!
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

außerdem
Kaeru Gaman hat geschrieben:in PB musst du die werte aus DATA oder einer Datei einlesen, sofern du sie nicht direkt hinschreiben willst
das einlesen aus einer data-section ist praktisch das selbe.

AUSSERDEM ist das was du in C machst auch nur das erzeugen eines pointers direkt auf deine im code angegebenen daten, also effektiv DASSELBE wie eine eingeschlossene DATA-section in PB, mit dem unterschied, dass man sie in PB nur deshalb nicht diirekt als String-Array nutzen kann, weil ein String-Array in PB eben nicht die strings sondern die pointer zu ihnen enthält.
ts-soft hat geschrieben:Das gilt aber nur für unflexible Programmierer!
dem schließe ich mich an. über PB zu meckern, nur weil ein ausgesprochen C-spezifisches Konstrukt keine direkte entsprechung hat, das ist ja *******
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten