Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: Fügt ein neues Element in Array hinzu

  1. #11
    Gundam00 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.09.2011
    Beiträge
    10
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vieleicht habe ich meine Frage voher nicht genau erklärt. Meine Frage ist: die neue Elemente in angegebener Indexe eines vorher dimensionierten Arrays hinzufügen. Die Anzahl der zu fügenden Elemente ist konstant und vorher definiert. Die Dimension neues erzeugten Arrays ist = vorher definierte Dimension dieses Arrays.
    z.B.
    Array: Array[1..10] OF STING := ['a','b','c','g'];
    Jetzt werden 'd', 'e', 'f' einzeln in Index 4, 5, 6 des originalen Arrays hinzugefügt und ein neues Array of String Array := ['a','b','c','d','e','f','g'] wird erzeugt.
    ps: An Anfang wird die Dimension des Array in 10 definiert, aber nur erste 4 Elemente werden bewertet. Nach Hinzufügen der neuen Elemente werden erste 7 Elemente bewertet, aber Dimension des Array ist noch 10.

  2. #12
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard

    Damit habe ich Deine Frage noch immer nicht verstanden....

    Du hast ein Array
    Code:
    arrArray: Array[1..10] OF STING := ['a','b','c','g'];
    Im Speicher sieht das dann so aus:
    Code:
    arrArray[1]:='a'
    arrArray[2]:='b'
    arrArray[3]:='c'
    arrArray[4]:='g'
    arrArray[5]:=''
    arrArray[6]:=''
    arrArray[7]:=''
    arrArray[8]:=''
    arrArray[9]:=''
    arrArray[10]:=''
    Wenn Du nun weitere Elemente hinzufügst, nämlich 'd', 'e', 'f' an 4, 5, 6 , sieht dein Array wie folgt aus:
    Code:
    arrArray[1]:='a'
    arrArray[2]:='b'
    arrArray[3]:='c'
    arrArray[4]:='d'
    arrArray[5]:='e'
    arrArray[6]:='f'
    arrArray[7]:=''
    arrArray[8]:=''
    arrArray[9]:=''
    arrArray[10]:=''
    Und was ist nun unklar???

  3. #13
    Gundam00 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.09.2011
    Beiträge
    10
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Orignales Array sieht so aus:
    arrArray[1]:='a'
    arrArray[2]:='b'
    arrArray[3]:='c'
    arrArray[4]:='g'
    arrArray[5]:=''
    arrArray[6]:=''
    arrArray[7]:=''
    arrArray[8]:=''
    arrArray[9]:=''
    arrArray[10]:=''
    Wenn neue Elemente hinzufügt werden, soll das neue Array so aussiehen:
    arrArray[1]:='a'
    arrArray[2]:='b'
    arrArray[3]:='c'
    arrArray[4]:='d'
    arrArray[5]:='e'
    arrArray[6]:='f'
    arrArray[7]:='g'
    arrArray[8]:=''
    arrArray[9]:=''
    arrArray[10]:=''
    Das 4. Element 'g' in orignalem Array nach Hinzufügen der neuer Elemente wird nicht durch neues Element ersetzt aber in Index 7 des neuen Arrays verschoben.
    Wie kann ich soweise Hinzufügen erzielen.
    Geändert von Gundam00 (27.09.2011 um 14:04 Uhr)

  4. #14
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard

    Okay....ich denke, jetzt habe ichs verstanden.

    Du möchtest also den Inhalt von Index 4 an die Position von Index 7 verschieben?

    In dem Fall muss Du das wirklich händisch machen.

    Original Array
    Code:
    sTemp:=arrArray[4]:='g';
    Neue Array Zuweisung
    Code:
     
    arrArray[4]:='d' ;
    arrArray[5]:='e' ;
    arrArray[6]:='f' ;
    arrArray[7]:=sTemp ;
    Ergebenis: Neues Array
    Code:
    arrArray[1]:='a' 
    arrArray[2]:='b' 
    arrArray[3]:='c' 
    arrArray[4]:='d' 
    arrArray[5]:='e' 
    arrArray[6]:='f' 
    arrArray[7]:='g' 
    arrArray[8]:='' 
    arrArray[9]:='' 
    arrArray[10]:=''

  5. Folgender Benutzer sagt Danke zu mac203 für den nützlichen Beitrag:

    Gundam00 (27.09.2011)

  6. #15
    Registriert seit
    27.07.2011
    Beiträge
    17
    Danke
    4
    Erhielt 6 Danke für 3 Beiträge

    Standard

    Ich hab es so verstanden:

    Bsp: füge 'd' in pos. 4 ein:

    -> ALLE Elemenete ab dem 4 Index verschieben sich um 1 nach hinten
    -> an pos 4 wird "d" gesetzet.

    In dem Fall würde ich ein zweites Array zur Hand nehmen und alle Elemente ab Index 4 temporär da hineinspeichern. Dann das neue Element an Pos 4 rein, zum Schluss alle Elemente in Temp-Array ins Orig-Array ab Index 4+1 wieder zurrück.
    Geändert von fdisk (27.09.2011 um 14:32 Uhr) Grund: vertipper

  7. Folgender Benutzer sagt Danke zu fdisk für den nützlichen Beitrag:

    Gundam00 (27.09.2011)

  8. #16
    Gundam00 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.09.2011
    Beiträge
    10
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Vielen Dank! In o.g. Beispiel wird nur ein Element verschoben. Das kann man natürlich händisch machen. Aber wenn ein Array wuchtige Dimension z.B. Array[1..10000] hat und in dem mehrere tausende neue Elmente hinzugefügt sowie mehrere tausende alte Elemente verschoben werden sollen. Es ist nicht einfach händisch zu machen. Haben Sie noch gut Idee? Gibt es Funktion in TC2 ,mit der kann man einfach tausende Elemente in Array nach hinter verschieben?

  9. Folgender Benutzer sagt Danke zu Gundam00 für den nützlichen Beitrag:

    fdisk (27.09.2011)

  10. #17
    Gundam00 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.09.2011
    Beiträge
    10
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von fdisk Beitrag anzeigen
    Ich hab es so verstanden:

    Bsp: füge 'd' in pos. 4 ein:

    -> ALLE Elemenete ab dem 4 Index verschieben sich um 1 nach hinten
    -> an pos 4 wird "d" gesetzet.

    In dem Fall würde ich ein zweites Array zur Hand nehmen und alle Elemente ab Index 4 temporär da hineinspeichern. Dann das neue Element an Pos 4 rein, zum Schluss alle Elemente in Temp-Array ins Orig-Array ab Index 4+1 wieder zurrück.
    Vielen Dank! Gute Idee, ob es ist so zu machen, wenn man Elemente in Temp-Array ins Orig-Array wieder zurückgibt.
    Annahme, die Dimension des Temp-Array ist 1000
    FOR index =1 To 1000 BY 1 DO
    Orig-Array [index+4]:= Temp-Array [index];
    END_FOR

  11. #18
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard

    Vielen Dank! Gute Idee, ob es ist so zu machen, wenn man Elemente in Temp-Array ins Orig-Array wieder zurückgibt.
    Annahme, die Dimension des Temp-Array ist 1000
    Für den Fall muss das Orginal-Array aber wie folgt deklariert sein
    Code:
    Orig-Array [1..1004] OF STRING;
    Dann ist das machbar.

    Gibt es Funktion in TC2 ,mit der kann man einfach tausende Elemente in Array nach hinter verschieben?
    Nein, weder in Tc2 noch in Tc3!
    Die einzige Möglicheit bestünde mit Speicherzugriffsfunktionen wie z.B. MEMCPY. Damit sollte man dann aber sinnvoll und bewußt umgehen. Hierbei wird auf den tatsächlichen Speicher und nicht auf eine TwinCAT generierte Adresse zugegegriffen.
    Damit hat man schnell, bei falscher Anwendung gerade in Schleifenkonstrukten, Änderungen im Speicher vorgenommen, die sich auch auf andere Programme außerhalb von TwinCAT auswirken können!
    Geändert von mac203 (27.09.2011 um 14:50 Uhr) Grund: Erweiterung

  12. Folgender Benutzer sagt Danke zu mac203 für den nützlichen Beitrag:

    Gundam00 (27.09.2011)

  13. #19
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    757
    Danke
    27
    Erhielt 166 Danke für 144 Beiträge

    Standard

    Zitat Zitat von Gundam00 Beitrag anzeigen
    Gibt es Funktion in TC2 ,mit der kann man einfach tausende Elemente in Array nach hinter verschieben?
    Schau Dir mal die Funktion MEMMOVE aus der TcSystem.Lib an. Damit geht es auch ohne zusätzliches Array.

  14. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    Gundam00 (27.09.2011)

  15. #20
    Gundam00 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.09.2011
    Beiträge
    10
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    OK! Dank alle, jetzt weiß ich wie kann man soweise Probleme lösen. In VB und Labview gibt es Array.insert-Funktion, mit der man neues Element einfach in gewünschten Index des Arrays hinzufügen kann. Aber leider in IEC 61131 gibt es nicht, muss man das so händisch machen.

Ähnliche Themen

  1. Array mit strukturierten Element Zur CSV-Datei
    Von ysh032 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 14.09.2011, 14:23
  2. Array Element über Variable auslesen.
    Von FriedelM im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 15.12.2010, 09:03
  3. Antworten: 6
    Letzter Beitrag: 03.07.2008, 15:22
  4. Element aus Array kopieren
    Von guidokk im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 18.06.2008, 16:14
  5. Fehlermeldung ActiveX-Element
    Von Lorenz im Forum HMI
    Antworten: 1
    Letzter Beitrag: 11.09.2006, 12:42

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •