Zeichenketten aus Datenliste in andere Zeichenkette schreiben

  • Hallo Leutz!


    Ich würde gerne aus einem Datenfeld eine Zeichenkette auslesen und diese in eine andere Variable schreiben. (ab version 4)
    Beispiel:


    (ab version 4)


    INT i
    DECL CHAR TESTCHAR[2,2]
    DECL CHAR NEUCHAR[2]


    TESTCHAR[1,]="ab"
    TESTCHAR[2,]="cd"



    NEUCHAR[]=" "


    NEUCHAR[]=TESTCHAR[1,] klappt nicht


    Auch mit SWRITE hatte ich keinen Erfolg.


    das einzige was klappt ist:


    for i = 1 to 2
    NEUCHAR[i]=TESTCHAR[1,i]
    endfor


    Geht das nicht einfacher? :angry:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Schritt für Schritt zum Roboterprofi!
  • hmm, ich müsst auch rumprobieren.


    NEUCHAR[]=TESTCHAR[1,] klappt nicht


    NEUCHAR[1]=TESTCHAR[1,1] vielleicht ?

    Menschen brauchen Roboter, aber auch Roboter brauchen Menschen.

    Roboter sichern die Arbeitsplätze und den Fortschritt der Industrieländer, da sie kostengünstig und qualitativ hochwertig produzieren.

    Ohne Automatisierung mit Robotern werden unsere Produkte in Billiglohnländern hergestellt.

    >> Abonniere meinen YouTube Roboterkanal <<

  • Neee, das gibt dann so komische rote Kreuze auf dem Programmicon, nach dem speichern...


    :zwink:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • soviel ich weiss, geht das wirklich nicht einfacher. das verhalten von arrays ist in KRL recht schwer vorhersehbar. was manchmal klappt ist


    - die strings global zu deklarieren (im $config.dat oder im *.dat als DECL GLOBAL ... )
    - falls ein array ein parameter ist (sonst würde das programm ja keinen grossen sinn machen, da du ja direkt TESTCHAR[x, ] verwenden kannst) diesen als :OUT anstatt als :IN zu übergeben


    sonst kommst du um die schleife wohl nicht rum. falls der quellstring verschieden lang sein kann, kannst du anstatt


    FOR i = 1 TO 2


    auch


    FOR i = 1 TO StrLen( TESTCHAR[1, ] ) ; aktuell zugewiesene laenge oder...
    FOR i = 1 TO StrDeclLen( TESTCHAR[1, ] ) ; laenge bei deklation


    verwenden. allerdings weiss ich nicht, ob die Len funktionen auch bei zweidimensionalen feldern beissen. jedenfalls muss der zielstring dann garantiert immer mindestens gleichlang sein, wie der quellstring, sonst kommt zur laufzeit eine bereichsüberschreitung. aber du könntest ja beide längen mit genau diesen funktionen zuerst checken, und die FOR schleife bis zum kürzeren hochzählen lassen.


    falls die Len funktionen zu langsam sind (zum beispiel im sps.sub) kann man deren resultat ja in einem INT speichern, und den als FOR abbruchwert einsetzen, dann wird das teil nur einmal ausgeführt, und nicht bei jedem durchgang...


    gruss

    &quot;When using vi the screen of your terminal acts as a window into the file which you are editing. Changes which you make to the file are reflected in what you see.&quot;<br />Bill Joy 1978

    Einmal editiert, zuletzt von rob ()

  • WooOw rob !
    :grinser043:



    Danke für die Erklärung und die Tips :liebe024:


    Jetzt hab ich wieder was gelernt.


    :blumen:




    :ylsuper:

    Menschen brauchen Roboter, aber auch Roboter brauchen Menschen.

    Roboter sichern die Arbeitsplätze und den Fortschritt der Industrieländer, da sie kostengünstig und qualitativ hochwertig produzieren.

    Ohne Automatisierung mit Robotern werden unsere Produkte in Billiglohnländern hergestellt.

    >> Abonniere meinen YouTube Roboterkanal <<

    Einmal editiert, zuletzt von Werner Hampel ()

  • WooOw rob !
    :grinser043:



    Danke für die Erklärung und die Tips :liebe024:


    Jetzt hab ich wieder was gelernt.


    :blumen:




    :ylsuper:

    Menschen brauchen Roboter, aber auch Roboter brauchen Menschen.

    Roboter sichern die Arbeitsplätze und den Fortschritt der Industrieländer, da sie kostengünstig und qualitativ hochwertig produzieren.

    Ohne Automatisierung mit Robotern werden unsere Produkte in Billiglohnländern hergestellt.

    >> Abonniere meinen YouTube Roboterkanal <<

    Einmal editiert, zuletzt von Werner Hampel ()

  • jo, alles klar :)


    :supi: :beerchug: :blumen:


    :ylsuper: :ylsuper: :ylsuper:

    &quot;When using vi the screen of your terminal acts as a window into the file which you are editing. Changes which you make to the file are reflected in what you see.&quot;<br />Bill Joy 1978

  • Hmmmm, also die StrLen Funktion scheint meiner OFFICE BOF 4.1 gänzlich unbekannt zu sein. Reden wir hier wirklich über KRL? :kopfkratz:


    Falls es diese Funktion doch geben sollte, wo findet man die Dokumentation über solche Funktionen? Kann' s in meinen Dokus nicht finden...

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • oje, ich seh's grad. hab's nur im 5.2er buch. aber ich hab mal eine funktion geschrieben, die das ersetzen könnte:


    ...das wäre StrDeclLen. um ein StrLen zu machen einfach die zeile

    Code
    WHILE( VARSTATE( "array[nPosition]" ) <> #UNKNOWN )


    durch

    Code
    WHILE( VARSTATE( "array[nPosition]" ) == #INITIALIZED )


    ersetzen.


    das zweite hab ich nicht ausprobiert, müsste aber klappen :)


    die funktion VARSTATE findest du im Reference Guide zu allerhinterst (Kapitel 2.3.1).


    gruss, rob


    EDIT
    das müsste in diesem fall natürlich CHAR array[] heissen, nicht INT. KRL unterstützt leider noch keine templates (im C++ sinn)...

    &quot;When using vi the screen of your terminal acts as a window into the file which you are editing. Changes which you make to the file are reflected in what you see.&quot;<br />Bill Joy 1978

    Einmal editiert, zuletzt von rob ()

  • Das klappt mit 2-dimensionalen Arrays auch nicht. Hat mir aber denoch weitergeholfen.
    Vielen Dank! :merci:


    Für die StrLen-Ersatz funktion muß es übrigens


    RETURN nPosition


    heißen. Hab ich gerade auspropiert.



    BTW: Wenn ich so deine Artikel lese, habe ich den Eindruck, daß sich in deinem Kopf eine extra Partition mit KRL befindet! Stimmt das? :zwink:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Hätte da diesen Vorschlag:

    Code
    STRUC test Char text[30]
    DECL test texte[20]
    DECL CHAR neu_text[30]
    
    
    neu_text=texte[2].text[]


    Also nen Array von structs mit je einem char array. Sollte eigentlich tun. Je nach dem was Du vor hast, kannst Du da vielleicht noch mehr in die einzelnen Einträge rein tun. zB nen Strlen, falls Du das öfter brauchst.
    Das sind halt nen paar schleifen weniger.

    If you and DEAD people can read Hex, how many people can read Hex?

  • hab nur das handbuch gefressen :uglyhammer_2:


    ja die zweite dimension, hab ich vergessen... könnte man als parameter nicht einfach

    Code
    DEFFCT INT array_size( array[][] :OUT )


    ...mit den entsprechenden anpassungen in der funktion?


    wäre doch gelacht, wenn wir das problem nicht lösen ;)

    &quot;When using vi the screen of your terminal acts as a window into the file which you are editing. Changes which you make to the file are reflected in what you see.&quot;<br />Bill Joy 1978

  • kai's idee hat auch seinen reiz :gutidee:

    &quot;When using vi the screen of your terminal acts as a window into the file which you are editing. Changes which you make to the file are reflected in what you see.&quot;<br />Bill Joy 1978

  • Kann es sein, das Dinge wie
    test[]="halt so ein Text"
    ausschliesslich bei der Zuweisung und nie beim Abfragen erlaubt sind?
    Was macht denn array_size (oder ne andere Funktion, die Arrays übergeben bekommt), wenn man ihm mit
    aray_size( testarray[1,])
    Nur die erste Zeile des 2D-Arrays übergeben will? nichts sinnvolles, oder?


    Ich finde die SWRITE-Funktion hat immer was von mit Kanonen auf Spatzen schiessen...

    If you and DEAD people can read Hex, how many people can read Hex?

  • An: LindePaul


    :nocheck:


    Hmmmm, neee, bei mir steht da:


    "a "


    Ist ja auch eigentlich richtig: Weil ja der Parameter TESTCHAR[1,1] ist!

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

    Einmal editiert, zuletzt von IrrerPolterer ()

  • hmmm, bei mir funktionierts


    wenn TESTCHAR[1,1] als Source angegeben wird bedeutet das nicht Länge 1 sondern ab 1. Byte


    hast Du den Formatparameter %s angegeben?

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Jepp! habe ich. Kann es sein, daß ich noch irgendwas in der State-Struktur eingeben muß?


    :???:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • nein, nur den offset auf 0 setzen
    mein Zielarray ist 10 Bytes lang, dürfte aber nichts ausmachen :?:
    bin schon Zuhause, ich schicke Dir morgen das Program (habe V5.4.8)
    Gruss Paul

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden