LabVIEWForum.de
Array durchsuchen und ändern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Array durchsuchen und ändern (/Thread-Array-durchsuchen-und-aendern)



Array durchsuchen und ändern - Fry12 - 24.10.2014 14:28

Hallo Leute!

Folgendes Problem: In einem 1D-Array sind eine Reihe von Bytes gespeichert. Die Größe des Arrays ist dabei nicht fest, sondern variabel. Ich möchte nun den Inhalt dieses Arrays nach bestimmten Bytes durchsuchen und sie ggfs. ändern.

Das Ganze soll so ablaufen:
  • Nach dem Byte '0xE' suchen
  • Falls gefunden -> Löschen und den Rest des Arrays an die Stelle des Bytes '0xE' schieben, so dass keine Lücke entsteht
  • Mit dem nächsten Byte fortfahren: Falls zuvor ein '0xE' gefunden wurde, soll das nach '0xE' folgende Byte geändert, d.h. bspw. eine Konstante addiert werden und an die selbe Stelle zurück ins Array geschrieben werden.
Diese Prozedor soll so lange ablaufen, bis kein '0xE' mehr im Array vorhanden ist. Also z.B.:

0xA1 0x31 0x0E 0x13 0xFF -> 0xA1 0x31 0x33 0xFF (hier bspw. mit Addition von 0x20 zu dem Byte, das hinter '0xE' steht)

Wie kann ich das realisieren? Ich bin total ans Programmieren mit C gewohnt und habe die ganze Zeit den Code dazu im Kopf, aber als LabVIEW Neuling tu ich mir schwer, das in LabVIEW grafisch umzusetzen.

Kann mir jemand ein paar Hinweise geben? Bitte keine kompletten Lösungen präsentieren, sondern eher einen Schubs in die richtige Richtung geben Wink


RE: Array durchsuchen und ändern - GerdW - 24.10.2014 14:42

Hallo,

probiere mal diesen PseudoCode umzusetzen:
Code:
index := 0
REPEAT
  byte := IndexArray(arr, index)
  if byte <> 0x0e THEN
    index++
  ELSE
    arr := DeleteFromArray(arr, index) % 0x0E-Byte löschen
    byte := IndexArray(arr, index) + Offset % nachfolgendes Byte lesen und Offset addieren
    ReplaceArraySubset( arr, index, byte) % wieder eintragen
  ENDIF
UNTIL index >= ArraySize(arr)



RE: Array durchsuchen und ändern - jg - 24.10.2014 14:42

Na dann mal ein kleiner Schubs:
[attachment=51144]
Was in den nicht sichtbaren Teilen der Case-Strukturen abgeht, darfst du dir überlegen... ( EDIT: bzw. aus Gerds Pseudo-Code zusammenreimen).

Gruß, Jens


RE: Array durchsuchen und ändern - Fry12 - 27.10.2014 10:37

Hallo ihr beiden!

Vielen Dank für eure Hilfe, ihr habt gerade so viel verraten, dass man noch selbst darüber nachdenken muss Wink

Mein Problem bestand vor allem darin, wie ich das veränderte Array in den nächsten Schleifendurchlauf übergeben kann und wie ich das fertig bearbeitete Array dann aus der For-Loop herausbekomme.

Dass man Shift Register für solche Fälle verwenden kann, war mir bewusst. Allerdings kannte ich das nur für bspw. Boolesche Werte, die ich dann in den nächsten Schleifendurchlauf shiften kann. Auch den "Trick" mit dem Auto-Indexing des Arrays, also dass man das Array im Auto-Indexing Modus an die For Loop anschließt, dann aber nur für das passende Hochzählen verwendet, kannte ich noch nicht.