# Array aus *.txt file erstellen



## Karabullo (15 März 2022)

Moin zusammen, 

ich möchte mir zur Vereinfachung in einer B&R SPS eine Funktion in c oder c++ bauen, welches mir ein Array aus einer *.txt-Datei erstellt. 

Beispiel der Textdatei:
Anton  = (unsigned char*) (&Daten.X[5].Y[3]);        
Achim  = (Bool*) (&Daten.X[5].Y[4]);        
Julia    = (long*) (&Daten.X[6].Y[1]);          
Jutta  = (unsigned short*)(&Daten.X[6].Y[3]);  

Zur Erklärung:
Ich hatte nun gerne automatisch ein Array erstellt, bei denen die Variablennamen "Anton" bis "Jutta" sind (also 4 Werte)

Anton hat die Größe eines unsigned char, also 1 Byte. Und pointert direkt auf das Array Daten.X[5]Y[3]
Achim hat die Größe eines Bool, also auch 1 Byte. Und pointert direkt auf das Array Daten.X[5]Y[4]
Julia hat die Größe eines long, also 4 Byte. Und pointert direkt auf das Array Daten.X[8]Y[5]
Jutta hat die Größe eines unsigned char, also 1 Byte. Und pointert direkt auf das Array Daten.X[9]Y[7]

Warum mache ich das nicht händisch? Die Datei ist über 700 Zeilen lang, das würde ich mir gerne ersparen.

Ich hoffe also da gibt es eine Lösung ;-)


----------



## JSEngineering (16 März 2022)

Karabullo schrieb:


> Ich hoffe also da gibt es eine Lösung ;-)


Moin Karabullo,

bestimmt gibt es eine Lösung - aber erstmal muß man Deine Aufgabe verstehen...
Und da scheitert es bei mir schon...
Du willst unterschiedliche Datentypen (char, Bool, Long, unsigned short) auf ein und das selbe Array (Y) schreiben... warum? wie? Welchen Datentypen hat Y?

Und warum willst Du mit Pointer auf statische Elemente schauen?

Und was hat das ganze mit einer Datei zu tun? Ich sehe nicht, daß z.B. eine Zeile der Datei z.B. einem Element in X entsprechen könnte, weil Du auch hier mit dem Index springst...

Bitte erkläre das mal genauer, vielleicht wird das mit Klarnamen anstatt Achim, Anton und Jutta auch nochmal genauer, was Du machen möchtest.

Gruß
    Jens


----------



## Karabullo (16 März 2022)

Also, ich versuche das mal zu erklären.

Es gibt bereits ein recht großes Array in der SPS, das aber keine Klarnamen hat. Sondern wir oben beschrieben "Daten" heisst mit den Indizes von X (0 - 60) und von Y (0 - 6). Die Y sind dabei im Byte-Format (USINT)
Dann gibt es eine Zuordnungstabelle im *.txt-Format, wo allen Inhalten in dem Array ein Klarname zugeordnet wird. Wird z.B. ein long mit 4 Byte, (also z.B. ein DINT) zugeordnet, dann werden die nächsten 4 Byte vom Array ausgelesen. 

Wie oben schon beschrieben sieht die *.txt folgendermaßen aus:

Wert1 = (unsigned char*) (&Daten. X[5]. Y[3]);
Wert2 = (Bool*)                 (&Daten. X[5]. Y[4]);
Wert3 = (long*)                 (&Daten. X[6]. Y[1]);
Wert4 = (unsigned short*)(&Daten. X[6]. Y[3]);

Und daraus will ich automatisch sowas bauen wie im Anhang zu sehen, also ein Array das auf die Daten in dem anderen Aarry referenziert.

Ich hoffe nun ist es verständlicher?


----------



## JSEngineering (16 März 2022)

ja, ein bißchen deutlicher wird es... ich frage mich, warum das so ist, wie es ist...
ist das existierende Byte-Array ein Empfangspuffer für Daten?
Warum gibt es eine X-Dimension?

Zumindest hat sich jemand schonmal die Mühe einer "Übersetzungstabelle" gemacht...
Kann die sich für ein und das selbe Programm ändern? Oder ist die fix?

Ich sehe immer noch das Problem der gemixten Datentypen... in Deinem Bild zeigst Du einen struct mit 4 Datentypen. Gehören die vier Werte zusammen?
Wenn die Übersetzungstabelle fix ist, kannst Du einmal per Excel eine neue Zuordnung zur Deinen structs generieren und in den Code einfügen...


----------

