Editfeld Subscript used with non-Array variable

  • Guten Morgen zusammen,

    ich benutze den Befehl _GUICtrlEdit_AppendText (#Include <GuiEdit.au3>) um ein Editfeld zu befüllen.
    Der Text wird immer am Ende angehängt! Soweit so gut!
    Meine Frage:
    Mit welchem Befehl kann ich bestimmen wo genau eingefügt wird.
    (Zeilenanfang, Zeilendene, aktuelle Cursurposition...)

    So sieht z.B. die Zeile aus
    die Code am Ende einfügt!

    [autoit]


    _GUICtrlEdit_AppendText($Ziel, "Hier steht mein Text...."& @CRLF)

    [/autoit]


    Grüße
    Ilse ;)

    2 Mal editiert, zuletzt von Ilse (18. April 2011 um 17:38)

  • Du kannst mit

    [autoit]

    _GUICtrlEdit_InsertText

    [/autoit]

    Text an einer bestimmten Stelle einfügen

  • Schönen guten Morgen TheLuBu,

    merci, das klappt!

    [autoit]


    Case $Anfang
    _GUICtrlEdit_InsertText($Ziel, "Hier steht mein Text...."& @CRLF,0 )

    [/autoit]

    der Text wird am Anfang eingesetzt.
    Weißt du auch wie ich einen Text an eine ganz bestimmte Cursorposition im Editfeld bekomme?
    Ich klicke zuerst in das Editfeld an eine Position
    und dann auf den Button Einfügen!

    Grüße
    Ilse ;)

  • Ich würde es mit

    [autoit]

    _GUICtrlEdit_GetSel

    [/autoit]

    versuchen, wobei ich nicht genau weiß, ob es auch ohne markierung etwas zurückliefert

    • Offizieller Beitrag

    Stelle suchen, wo eingefügt werden soll und Position übergeben:

    Spoiler anzeigen
    [autoit]

    #include <GuiEdit.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    $Debug_Ed = False ; Check ClassName being passed to Edit functions, set to True and use a handle to another control to see it work

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hEdit, $iPos

    [/autoit] [autoit][/autoit] [autoit]

    ; Create GUI
    GUICreate("Edit Insert Text", 400, 300)
    $hEdit = GUICtrlCreateEdit("", 2, 2, 394, 268, BitOR($ES_WANTRETURN, $WS_VSCROLL))
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Set Margins
    _GUICtrlEdit_SetMargins($hEdit, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), 10, 10)

    [/autoit] [autoit][/autoit] [autoit]

    ; Set Text
    _GUICtrlEdit_SetText($hEdit, "1324890")
    MsgBox(0, '', 'jetzt zwischen 4 und 8 "567" einfügen')

    [/autoit] [autoit][/autoit] [autoit]

    ; zwischen 4 und 8 soll 567 eingefügt werden
    $iPos = StringInStr(GUICtrlRead($hEdit), '8')

    [/autoit] [autoit][/autoit] [autoit]

    ; Insert text
    _GUICtrlEdit_InsertText($hEdit, "567", $iPos)

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Eigentlich wäre der beste Weg:

    1. Ich suche einen Text (das klappt)

    [autoit]


    $search = _StringBetween($aQuellRead[$i],"Name:"," ")

    [/autoit]


    und genau nach dieser SuchPosition sollte dann was eingefügt werden!

    [autoit]


    If IsArray($Search) Then
    _GUICtrlEdit_InsertText($Ziel, "$" & $search[0]&" = "&"" &""""& $search[0]&""""& @CRLF,0)
    Else

    [/autoit]


    ich kann was einfügen, hier ist das natürlich nicht korrekt (Zeilenanfang @CRLF,0)
    ...also irgendwie in der Syntax nach dem Search, dann InsertText!

    huh...

    @ Bugfix,
    da hatten wir den gleichen Gedanken. Habe gepostet und dann erst deine Nachricht gelesen.


    ;) Ilse

  • BugFix
    Dabei muss man ja vorher festlegen, zwischen welchen Teilen eingefügt werden soll,
    Ilse hatte aber ja gesagt, sie möchte an eine Stelle, welche mit dem Cursor "markiert" wurde, etwas einfügen


    -EDIT-
    Ok dann habe ich es falsch verstanden, habe gedacht du willst die an eine stelle mit der Maus klicken und da dann einfügen ;)

    [autoit]

    $search = _StringBetween($aQuellRead[$i],"Name:"," ") ;String wird gesucht
    $pos = Stringinstr($aQuellRead[$i], $search[0]) ; sucht die position des strings im Text
    $pos += Stringlen($search[0]) ; addiert die Stringlänge zur gefundenen postion hinzu
    _GUICtrlEdit_InsertText($Ziel, "Text", $pos) ; fügt den Text hinter dem gefundenen ein

    [/autoit]
  • Hallo TheLuBu,

    hm... jetzt bekomme ich wieder diese ErrorMeldung

    Zitat

    Subscript used with non-Array variable.:

    habe versucht das so zu umgehen

    [autoit]


    If IsArray($Search) or ($Pos) Then
    _GUICtrlEdit_InsertText($Ziel, "Text", $pos) ; fügt den Text hinter dem gefundenen ein
    Else
    ;MsgBox(0,"","Es wurde nichts gefunden")
    EndIf

    [/autoit]


    Die Meldung wird in dieser Zeile angezeigt!

    [autoit]


    $pos = Stringinstr($aQuellRead[$i], $search[0]) ; sucht die position des strings im Text

    [/autoit]


    das geht leider nicht!

    Übrigens, hinter der Fundstelle sollte ein @CRLF rein.
    Ich meine, daß der neue Text am Zeilenanfang steht!

    :( Ilse

    • Offizieller Beitrag

    Irgendwie denkt ihr falsch, ihr müßt die Position im Edit suchen und nicht aus dem Quellcode.
    Außer beide sind gleich. :!:

    Wenn du den ganzen Code postest, kann man auch sehen was du überhaupt machst. Ohne den ganzen Code wird das
    wieder ein Endlosratespiel.

    Edit: Ilse, gewöhn dir mal bitte an, immer eine sinnvollen Code zu posten.
    Du erleichterst die Arbeit der Helfenden damit ungemein und es muß nicht aus jedem Thread ein Endlosgeposte werden.

  • Hallo Raupi,

    du hast vollkommen Recht.
    War glaube ich mein Fehler...

    Ich habe die ganze Zeit nochmals alles probiert und das ganze jetzt
    geändert. (Loop im Zielfeld) Ich glaube so kann man das jetzt besser nachvollziehen.

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <file.au3>
    #include <String.au3>
    #Include <GuiEdit.au3>

    [/autoit][autoit][/autoit][autoit]

    $Form1_1 = GUICreate("Funktions-Converter MCC", 969, 653, 282, 104)
    $MenuItem1 = GUICtrlCreateMenu("&Datei")
    $mnopen = GUICtrlCreateMenuItem("&öffnen", $MenuItem1)
    $mnSave = GUICtrlCreateMenuItem("&speichern", $MenuItem1)
    $mcClose = GUICtrlCreateMenuItem("&beenden", $MenuItem1)
    $MenuItem3 = GUICtrlCreateMenu("&Konvertierung")
    $MenuItem2 = GUICtrlCreateMenuItem("&Speichern als", $MenuItem3)
    $Input2 = GUICtrlCreateInput("", 640, 16, 205, 21)
    $Label1 = GUICtrlCreateLabel("Name", 856, 20, 76, 17)
    $Tab1 = GUICtrlCreateTab(16, 36, 933, 569)
    $TabSheet1 = GUICtrlCreateTabItem("Text bearbeiten")
    $Quelle = GUICtrlCreateEdit("", 28, 112, 393, 457)
    GUICtrlSetData(-1, "Quelle")
    GUICtrlSetBkColor(-1, 0xE3E3E3)
    $Ziel = GUICtrlCreateEdit("", 548, 112, 385, 457)
    GUICtrlSetData(-1, "Ziel")
    GUICtrlSetBkColor(-1, 0xE3E3E3)
    $Start = GUICtrlCreateButton("Konvertieren >", 432, 116, 103, 25)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $mnopen
    Case $mnSave
    Case $mcClose
    Case $MenuItem2
    Case $Start
    $ZielRead = GUICtrlRead($Ziel)
    $aZielRead = StringSplit($ZielRead, @CRLF, 1)

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aZielRead,1)-1
    $search = _StringBetween($aZielRead[$i],"ilse","") ;String wird gesucht
    $pos = Stringinstr($aZielRead[$i], $search[0]) ; sucht die position des strings im Text
    $pos += Stringlen($search[0]) ; addiert die Stringlänge zur gefundenen postion hinzu
    ;_GUICtrlEdit_InsertText($Ziel, "Text" @CRLF, $pos) ; fügt den Text hinter dem gefundenen ein
    ;_ArrayDisplay($search)

    [/autoit][autoit][/autoit][autoit]

    If IsArray($Search) Then
    _GUICtrlEdit_InsertText($Ziel, "Text" & @CRLF, $pos) ; fügt den Text hinter dem gefundenen ein

    [/autoit][autoit][/autoit][autoit]

    Else
    endif
    next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]

    Folgendes passiert:

    Wenn das Ziel-EDIT den Suchtext nicht enthält stürzt es ab!
    Schreibe ich in das Suchfeld meinen Namen
    (Es wird ja beim Button nach Ilse gesucht)
    dann wird Text aber davor gesetzt und nicht danach!

    Die Errormeldung wenn weitere Suchfunktionen dazukommen

    Zitat

    Subscript used with non-Array variable.:
    $pos = Stringinstr($aZielRead[$j], $search[0])
    $pos = Stringinstr($aZielRead[$j], $search^ ERROR


    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (18. April 2011 um 12:34)

  • Hallo nochmal,

    ich habe jetzt mal den Code für beide Editfelder fertig.

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <file.au3>
    #include <String.au3>
    #Include <GuiEdit.au3>

    [/autoit][autoit][/autoit][autoit]

    $Form1_1 = GUICreate("Funktions-Converter MCC", 969, 653, 282, 104)
    $MenuItem1 = GUICtrlCreateMenu("&Datei")
    $mnopen = GUICtrlCreateMenuItem("&öffnen", $MenuItem1)
    $mnSave = GUICtrlCreateMenuItem("&speichern", $MenuItem1)
    $mcClose = GUICtrlCreateMenuItem("&beenden", $MenuItem1)
    $MenuItem3 = GUICtrlCreateMenu("&Konvertierung")
    $MenuItem2 = GUICtrlCreateMenuItem("&Speichern als", $MenuItem3)
    $Input2 = GUICtrlCreateInput("", 640, 16, 205, 21)
    $Label1 = GUICtrlCreateLabel("Name", 856, 20, 76, 17)
    $Tab1 = GUICtrlCreateTab(16, 36, 933, 569)
    $TabSheet1 = GUICtrlCreateTabItem("Text bearbeiten")
    $Quelle = GUICtrlCreateEdit("", 28, 112, 393, 457)
    GUICtrlSetData(-1, "Quelle")
    GUICtrlSetBkColor(-1, 0xE3E3E3)
    $Ziel = GUICtrlCreateEdit("", 548, 112, 385, 457)
    GUICtrlSetData(-1, "Ziel")
    GUICtrlSetBkColor(-1, 0xE3E3E3)
    $Start = GUICtrlCreateButton("Konvertieren >", 432, 116, 103, 25)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $FeldName = "ATTR=Name:"

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $mnopen
    Case $mnSave
    Case $mcClose
    Case $MenuItem2
    Case $Start
    $ZielRead = GUICtrlRead($Ziel)
    $aZielRead = StringSplit($ZielRead, @CRLF, 1)
    $QuelleRead = GUICtrlRead($Quelle)
    $aQuellRead = StringSplit($QuelleRead, @CRLF, 1)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aQuellRead,1)-1

    [/autoit][autoit][/autoit][autoit]

    #region Feldvariablen
    if StringInStr($aQuellRead[$i],$FeldName) Then ;Feldname convertiert!
    $search = _StringBetween($aQuellRead[$i],"ATTR=Name:","")

    [/autoit][autoit][/autoit][autoit]

    If IsArray($Search) Then

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlEdit_AppendText($Ziel, "$" & $search[0]&" = Source Text "&"," &""""& $search[0]&""")"& @CRLF)
    Else
    ;MsgBox(0,"","Es wurde nichts gefunden")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndIf
    #endregion Feldvariablen
    next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($aZielRead,1)-1
    $search = _StringBetween($aZielRead[$i],"ilse","") ;String wird gesucht
    $pos = Stringinstr($aZielRead[$i], $search[0]) ; sucht die position des strings im Text
    $pos += Stringlen($search[0]) ; addiert die Stringlänge zur gefundenen postion hinzu
    ;_GUICtrlEdit_InsertText($Ziel, "Text" @CRLF, $pos) ; fügt den Text hinter dem gefundenen ein
    ;_ArrayDisplay($search)

    [/autoit][autoit][/autoit][autoit]

    If IsArray($Search) Then
    _GUICtrlEdit_InsertText($Ziel, "Text", $pos) ; fügt den Text hinter dem gefundenen ein

    [/autoit][autoit][/autoit][autoit]

    Else
    endif
    next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]

    Ich bekomme diese Fehlermeldung nicht weg!

    Zitat

    Subscript used with non-Array variable.

    obwohl ich IsArray verwende!
    Woran kann das liegen?

    Zum nachvollziehen des Codes:

    1. Wenn ich einfach auf Konvertieren klicke stürzt es ab!
    2. Trage ich rechts Ilse ein und klicke auf konvertiere dann: (Text wird falsch eingefügt) kein Absturz
    3. Ist Zielfeld leer (Absturz)...


    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (18. April 2011 um 13:29)

  • ändere mal das bei dir ab Zeile 72

    [autoit]

    For $i = 1 To UBound($aZielRead,1)-1
    $search = _StringBetween($aZielRead[$i],"ilse","") ;String wird gesucht
    If IsArray($Search) Then
    $pos = Stringinstr($aZielRead[$i], $search[0]) ; sucht die position des strings im Text
    $pos += Stringlen($search[0]) ; addiert die Stringlänge zur gefundenen postion hinzu
    ;_GUICtrlEdit_InsertText($Ziel, "Text" @CRLF, $pos) ; fügt den Text hinter dem gefundenen ein
    ;_ArrayDisplay($search)
    _GUICtrlEdit_InsertText($Ziel, "Text", $pos) ; fügt den Text hinter dem gefundenen ein
    Else
    endif
    next

    [/autoit]
  • Hallo TheLuBu,

    merci daß du dich wieder meldest!
    Der Error ist nun weg, aber das Ergebnis stimmt leider immer noch nicht!
    Ich bin immer noch auf Fehlersuche...

    Also: Nach dem Suchwort "Ilse" sollte ein Return erfolgen und dann der neue Text eingefügt werden!

    Zur Zeit sieht das Ergebnis so aus:

    [autoit]


    Das ist der neue TextIlse

    [/autoit]

    Es sollte aber so aussehen

    [autoit]


    Ilse
    Das ist der neue Text

    [/autoit]

    Der Text wird an den ANFANG gesetzt, ganz egal wo das Suchwort ist???
    Was mir noch aufgefallen ist:

    [autoit]


    _ArrayDisplay($Search) ; liefert kein Ergebnis!

    [/autoit]

    Liebe Grüße
    Ilse ;)

    3 Mal editiert, zuletzt von Ilse (18. April 2011 um 15:16)

  • Willst du den Text zwischen "ilse" und "" rausfinden (_Stringbetween) oder nur wissen, ob und wenn ja, an welcher stelle "Ilse" steht?
    Wenn du das Wort Ilse in dem Text suchen willst solltest du es so machen

    -EDIT- BugFix war schneller ;)
    -EDIT2- Das kommt davon, wenn man mit Kopfschmerzen vorm PC sitzt ;), jetzt sollte es stimmen

    [autoit]

    For $i = 1 To UBound($aZielRead,1)-1
    $search = StringinStr($aZielRead[$i],"ilse", 1) ;String wird gesucht
    If $search <> 0 Then
    $Search += StringLen("Ilse")
    _GUICtrlEdit_InsertText($Ziel, @CRLF& "Text", $search) ; fügt den Text hinter dem gefundenen ein
    Else
    EndIf
    next

    [/autoit]
    • Offizieller Beitrag

    TheLuBu
    Du hast einige Fehler drin:

    [autoit]

    $search = StringinStr($aZielRead[$i],"ilse") ;String wird gesucht
    $search = StringinStr($aZielRead[$i],"ilse", 1) ; hier sollte man CaseSens arbeiten um nicht Teilstrings zu finden

    [/autoit][autoit]

    _GUICtrlEdit_InsertText($Ziel, @CRLF& "Text", $search) ; fügt den Text hinter dem gefundenen ein
    ; Falsch! $search gibt die Startposition des gesuchten Strings an - also wird DAVOR eingefügt

    [/autoit]
  • ...leider immer noch nicht!
    Wenn ich im Code das einbaue
    dann erscheint wieder der Fehler

    Subscript used with non-Array variable.:
    $pos = Stringinstr($aZielRead[$i], $search[0])
    $pos = Stringinstr($aZielRead[$i], $search^ ERROR

    bin langsam am Ende mit den Nerven

    Liebe Grüße
    Ilse ;)

  • schau nochmal in meinen vorherigen Post, habe das (dank BugFix ;) ) verbessert ;)

  • Einfacher Test Ziel-Edit
    ...diesen Text ins Ziel Edit eintragen

    [autoit]


    1
    2
    3
    4
    Ilse
    5

    [/autoit]

    So sollte es aussehen:

    [autoit]


    1
    2
    3
    4
    Ilse
    Dieser Code wurde eingefügt
    5

    [/autoit]

    der Code

    [autoit]


    For $i = 1 To UBound($aZielRead,1)-1
    $search = StringinStr($aZielRead[$i],"ilse", 1) ;String wird gesucht
    If $search <> 0 Then
    $Search += StringLen("ilse")
    _GUICtrlEdit_InsertText($Ziel, @CRLF& "Dieser Code wird eingefügt", $search) ; fügt den Text hinter dem gefundenen ein
    Else
    EndIf
    next

    [/autoit]