Wie übergebe ich am sinnvollsten eine dynamisch große Liste, die wiederum nicht spezifizierte Felder enthält? Das einzig spezifische ist der Datentyp, der logischerweise String sein sollte. Aber wie macht man das am schlauesten? Denn im Grunde gibt es 2 Ebenen. Die erste Ebene ist eine Linked List. Denn es ist ja nie fest, wie viele Elemente reinkommen. Die zweite Ebene ist jetzt aber die große Frage. Eine Liste mit Strukturen wäre am logischsten. Aber wie kann ich mit Hilfe eines Strings auf ein Element der Struktur zugreifen? Die zweite Möglichkeit wäre eine Map. Da wäre das Zugriffsproblem gelöst. Nur da muss dann eben auch wieder eine Struktur zwischen, da es den Datentyp Map für eine Linked List nicht gibt. Das ist aber blöd zu händeln.
Hat da jemand eine Idee?
Mein bisheriges Modul:
Code: Alles auswählen
EnableExplicit
; Replacer-Moldule for Replacing Placeholder in Plaintext, HTML, Markdown etc.
; ===================================
; Module Declaration for external Use
DeclareModule Replacer
Declare.s ReplaceVariable(template.s, variable.s, content.s)
Declare.s ReplaceCondition(template.s, conditionblock.s, condition.b)
; Hier muss noch die Loop-Prozedur hin
EndDeclareModule
; ====================
; Moduleimplementation
Module Replacer
; ==================
; Internal variables
Define ExpressionVariable.s
Define ExpressionLoop.s
Define ExpressionEntity.s
Define ExpressionCondition.s
Define ExpressionFlags.i
ExpressionVariable = "{%VAR:<NAME>}"
ExpressionLoop = "{%LOOP:<NAME>}(.*?){%ENDLOOP:<NAME>}"
ExpressionEntity = "{%ENT:<NAME>}"
ExpressionCondition = "{%IF:<NAME>}(.*?){%ENDIF:<NAME>}"
ExpressionFlags = #PB_RegularExpression_DotAll | #PB_RegularExpression_MultiLine | #PB_RegularExpression_AnyNewLine | #PB_RegularExpression_NoCase
; ========================================
; Procedure to Replace any single variable
Procedure.s ReplaceVariable(template.s, variable.s, content.s)
Shared ExpressionVariable
ExpressionVariable = ReplaceString(ExpressionVariable,"<NAME>",variable)
ProcedureReturn ReplaceString(template,ExpressionVariable,content)
EndProcedure
; ==========================================================
; Procedure to show or delete textblock by a given condition
Procedure.s ReplaceCondition(template.s, conditionblock.s, condition.b)
Shared ExpressionCondition
Shared ExpressionFlags
Define Expression.i
Define Replacement.s
ExpressionCondition = ReplaceString(ExpressionCondition, "<NAME>", conditionblock)
Expression = CreateRegularExpression(#PB_Any, ExpressionCondition, ExpressionFlags)
If ExamineRegularExpression(Expression, template)
While NextRegularExpressionMatch(Expression)
If condition
template = ReplaceString(template, RegularExpressionMatchString(Expression), RegularExpressionGroup(Expression,1))
Else
template = ReplaceString(template, RegularExpressionMatchString(Expression), "")
EndIf
Wend
EndIf
FreeRegularExpression(Expression)
ProcedureReturn template
EndProcedure
; =================================================================
; Procedure to repeating a textblock and replace entity placeholder
Procedure.s ReplaceLoop(template.s, variable.s, ; BLOCKADE!)
; Und wie weiter?
; Hier soll der Textclock, der mit {%LOOP:<NAME>}TEXTBLOCK{%ENDLOOP:<NAME>} umschlossen
; so lange wiederholt werden, bie alle Zeile einer Liste abgearbeitet und die Einträge
; innerhalb des Blockes ersetzt wurde.
; Da es aber so dynamisch wie möglich sein soll, benötige eine Eingebung bzgl. des Parameters.
EndModule