Seite 1 von 1

Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 30.06.2014 09:38
von es_91
Hallo.

Ich habe ein riesiges Strukturpacket von deutschen Verben, so sieht es aus:

Code: Alles auswählen

Structure VERBKONJ
  
  Ich.s
  Du.s
  Er.s
  Wir.s
  Ihr.s
  Sie.s
  
EndStructure

Structure VERBTEMP
  
  Praesens.VERBKONJ
  Praeteritum.VERBKONJ
  Perfekt.VERBKONJ
  Plusquamperfekt.VERBKONJ
  Futur1.VERBKONJ
  Futur2.VERBKONJ
  
EndStructure

Structure VERBFORM
  
  Aktiv.VERBTEMP
  Vorgangspassiv.VERBTEMP
  Zustandspassiv.VERBTEMP
  
EndStructure

Structure VERB
  
  Infinitiv.s
  Indikativ.VERBFORM
  Konjunktiv1.VERBFORM
  Konjunktiv2.VERBFORM
  Imperativ.VERBFORM
  Partizip.VERBFORM
  
EndStructure
Die Struktur soll so gefüllt werden, dass alle Elemente denselben Wert erhalten. Das bedeutet unglaublich viele Codezeilen für wenig Effekt. Darum wollte ich fragen: kann ich mit for offset = 0 to sizeof(VERB) über die Struktur iterieren und per Speicherzugriff die Pointer alle auf denselben String setzen?

Etwa so:

Code: Alles auswählen

; Pseudocode:

Newlist Verben.VERB()
AddElement(Verben())

NeuerString$ = "testen"

For x = 0 to SizeOf(VERB) - 8
  PokeQ(@Verben() + x, @NeuerString$)
Next


Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 30.06.2014 09:52
von STARGÅTE
Schreib dir einfach 4 Prozeduren zum setzen von VERBKONJ, VERBTEMP, VERBFORM und VERB.
Dann hast du genau 6 Zuweisungen und 15 Prozeduranweisungen.

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 30.06.2014 10:40
von NicTheQuick
Du könntest durchaus per Pointermanipulation jedem Element in deinen Strukturen den selben String "testen" zuweisen. Allerdings war's das auch schon. Wenn du versuchen würdest einen der Strings zu ändern, würde das dann nämlich entweder alle anderen mit ändern oder alle anderen ungültig machen. Warum das genau so ist, wäre jetzt kompliziert zu erklären. Du könntest aber der Einfachheit halber sowas hier machen:

Code: Alles auswählen

Structure VERBKONJ
	Ich.s
	Du.s
	Er.s
	Wir.s
	Ihr.s
	Sie.s
EndStructure

Structure VERBTEMP
	Praesens.VERBKONJ
	Praeteritum.VERBKONJ
	Perfekt.VERBKONJ
	Plusquamperfekt.VERBKONJ
	Futur1.VERBKONJ
	Futur2.VERBKONJ
EndStructure

Structure VERBFORM
	Aktiv.VERBTEMP
	Vorgangspassiv.VERBTEMP
	Zustandspassiv.VERBTEMP
EndStructure

Structure VERB
	Infinitiv.s
	Indikativ.VERBFORM
	Konjunktiv1.VERBFORM
	Konjunktiv2.VERBFORM
	Imperativ.VERBFORM
	Partizip.VERBFORM
EndStructure

Procedure fillStringStructure(*structure.String, nElements.i, value.s)
	Protected i.i
	For i = 1 To nElements
		*structure\s = value
		*structure + SizeOf(String)
	Next
EndProcedure

Define verb.VERB

Define.i elemente = SizeOf(verb) / SizeOf(String)
Debug "Insgesamt sind es " + elemente + " Strings."

fillStringStructure(verb, elemente, "testen")

Debug verb\Partizip\Aktiv\Praesens\Sie
Debug verb\Konjunktiv1\Vorgangspassiv\Futur1\Wir
Das funktioniert aber nur, solange in der Struktur tatsächlich nur Strings vorkommen und sonst nichts. Ich iteriere hier einfach über alle Strings in der Struktur und setzen den String dort auf den festgelegten Wert.

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 01.07.2014 10:44
von es_91
Ja, genau so etwas hatte ich gesucht. Danke, Nic.

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 01.07.2014 13:36
von STARGÅTE
Wowow, der Code ist aber sehr sehr labil.
Es funktioniert nur für Strukturen die nur aus Strings besteht. Ein anderes Feld, und das Ding läuft gegen die Wand.
Also schön aufpassen!

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 01.07.2014 13:44
von NicTheQuick
Hauptsache das Problem wird einfach gelöst. :D

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 02.07.2014 07:14
von es_91
Dank auch an STARGATE! :D

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 06.07.2014 16:29
von _sivizius
und als Array? also

Code: Alles auswählen

Structure ...
  woerter.s[VIEL]
EndStructure
und dann statt den einzelnen Strukturfeldern Konstanten nehmen um sie Direkt zu bezeichnen?

Re: Strukturen direkt schreiben (per Speicherzugriff)

Verfasst: 06.07.2014 17:01
von NicTheQuick
Natürlich! :shock:
Wieso bin ich da nicht gleich drauf gekommen? :doh:

Das ist ja viel einfacher. Zwar, immer noch getrickst, aber irgendwie schöner:

Code: Alles auswählen

Structure VERBKONJ
	Ich.s
	Du.s
	Er.s
	Wir.s
	Ihr.s
	Sie.s
EndStructure

Structure VERBTEMP
	Praesens.VERBKONJ
	Praeteritum.VERBKONJ
	Perfekt.VERBKONJ
	Plusquamperfekt.VERBKONJ
	Futur1.VERBKONJ
	Futur2.VERBKONJ
EndStructure

Structure VERBFORM
	Aktiv.VERBTEMP
	Vorgangspassiv.VERBTEMP
	Zustandspassiv.VERBTEMP
EndStructure

Structure VERB
	s.s[0]
	Infinitiv.s
	Indikativ.VERBFORM
	Konjunktiv1.VERBFORM
	Konjunktiv2.VERBFORM
	Imperativ.VERBFORM
	Partizip.VERBFORM
EndStructure

Define verb.VERB

Define.i elemente = SizeOf(verb) / SizeOf(String)
Debug "Insgesamt sind es " + elemente + " Strings."

Define i.i
For i = 0 To elemente - 1
	verb\s[i] = "test"
Next

Debug verb\Partizip\Aktiv\Praesens\Sie
Debug verb\Konjunktiv1\Vorgangspassiv\Futur1\Wir