Ich glaub ich habs... und diesmal werden keine neuen Stringvariablen geöffnet. Ich nutze einfach den Ausgangsstring, ersetze die Zeilenumbrüche mit 0, also Stringendezeichen und setze Pointer einer Liste auf die Anfänge der Teile. Ich bin der Meinung das sollte schnell sein wenn es darauf ankäme...
Gibt es bei so etwas eigentlich nicht ein Problem wenn der Speicherort des Strings fragmentiert ist?
@ts-soft
Du meintest vorhin dass Unicode nicht mehr funktionieren könnte. Allerdings wenn man nicht einfach nur Zahlen auf die Pointer addiert um vorwärtszugehen sondern SizeOf, dann sollte das doch funktionieren oder? Auch die Zeilenumbrüche in Unicode sollte man doch mit 10 und 13 auslesen nicht?
Hier mal der Code: Die Funktion ist in Zeile 42-54.
Code: Alles auswählen
EnableExplicit
Structure Pointer
*p
EndStructure
Define *MainWindowHandle, *InputEditorHandle, *InputListIconHandle
Define *InputEditorList, *c.Character, *lastc.Character, *LineStart, *InputTransferButtonHandle
Define.i EventID, CharCount = 0
Define.s InputEditorList$
NewList InputList.Pointer()
Procedure Msg(Msg$,Type.a = 0)
Define Type$
If Not Type : Type$ = "Error" : Else : Type$ = "Message" : EndIf
MessageRequester(Type$, Type$+": " + Msg$, 0)
If Not Type : End : EndIf
EndProcedure
Procedure ChkCreated(*Handle.i, Type$, Action$ = "create", Addition$ = "")
If Not *Handle : Msg("Couldnt " + Action$ + " " + Type$ + " " + Addition$) : End : EndIf
EndProcedure
Macro ListAdd(List,Value) : AddElement(List) : List = Value : EndMacro
Macro ListAddS(List,Value) : AddElement(List) : List\s = Value : EndMacro
Macro ListAddP(List,Value) : AddElement(List) : List\p = Value : EndMacro
*MainWindowHandle = OpenWindow(#PB_Any, 0, 0, 661, 680, "URLTool", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
ChkCreated(*MainWindowHandle,"Window")
*InputEditorHandle = EditorGadget(#PB_Any, 10, 10, 200, 100)
*InputTransferButtonHandle = ButtonGadget(#PB_Any, 10, 120, 30, 30, "V")
*InputListIconHandle = ListIconGadget(#PB_Any, 10, 160, 200, 100, "title", 50, #PB_ListIcon_MultiSelect)
Repeat
EventID = WaitWindowEvent()
If EventWindow() = *MainWindowHandle And EventID = #PB_Event_Gadget
If EventGadget() = *InputTransferButtonHandle
InputEditorList$ = GetGadgetText(*InputEditorHandle)
*c = @InputEditorList$
*lastc = @InputEditorList$
ListAddP(InputList(),*c)
Repeat
If *c\c = 10 Or *c\c = 13
*c\c = 0
ElseIf *lastc\c = 0
ListAddP(InputList(),*c)
EndIf
*lastc = *c
*c + SizeOf(Character)
Until *c\c = 0
ForEach InputList()
Debug PeekS(InputList()\p)
Next
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow