Kann man die Größe eines ARRAY irgendwie zur Laufzeit bestimmen?
Ich möchte Werte aus einer Datei einlesen.
Doch kann die Datei unterschiedlich lang sein (unterschiedliche Zeilenanzahl besitzen). Zu Beginn der Anwendung lese ich die Datei Byteweiße aus. Immer wenn ein EndLine-Zeichen kommt lass ich eine Variable (maxZeilen) erhöhen. So ermittle ich die Länge der Zeilen -> dies funktioniert auch.
doch nun definiere ich folgende Variable:
VARDaten:ARRAY[1..maxZeilen]OF...;END_VAR
Wenn ich das Programm nun übersetzte bekomme ich die Fehlermeldung:
"...Obergrenze 'maxZeilen' unbekannt"
Daher meine Frage, ob man die Länge eines ARRAY zur Laufzeit bestimmen kann?
Hoffe Ihr könnt mir weiterhelfen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
die länge eines arrays muss beim compilieren bekannt sein.
du kannst [0..max] verwenden wenn max eine konstante ist.
es gibt eine möglichkeit unterschiedlich große arrays in bausteinen zu verarbeiten indem du einen pointer auf das array und die größe des arrays übergibst.
z.B. aufruf(adr(arrayx), sizeof(arrayx));
hier übergibst du einen pointer auf das array und die größe in bytes des arrays. das array selbst ist aber zur koimpilation festgelegt.
hiermit kannst du in einem baustein unterschiedliche arrays bearbeiten.
in der freien lib oscat.lib unter w www.oscat.de w findest du einige beispiele hierzu bei array funktionen
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo liebe Community,
ich habe folgende Frage:
Kann man die Größe eines ARRAY irgendwie zur Laufzeit bestimmen?
Ich möchte Werte aus einer Datei einlesen.
Doch kann die Datei unterschiedlich lang sein (unterschiedliche Zeilenanzahl besitzen). Zu Beginn der Anwendung lese ich die Datei Byteweiße aus. Immer wenn ein EndLine-Zeichen kommt lass ich eine Variable (maxZeilen) erhöhen. So ermittle ich die Länge der Zeilen -> dies funktioniert auch.
doch nun definiere ich folgende Variable:
Wenn ich das Programm nun übersetzte bekomme ich die Fehlermeldung:
"...Obergrenze 'maxZeilen' unbekannt"
Daher meine Frage, ob man die Länge eines ARRAY zur Laufzeit bestimmen kann?
Hoffe Ihr könnt mir weiterhelfen.
die länge eines arrays muss beim compilieren bekannt sein.
du kannst [0..max] verwenden wenn max eine konstante ist.
es gibt eine möglichkeit unterschiedlich große arrays in bausteinen zu verarbeiten indem du einen pointer auf das array und die größe des arrays übergibst.
z.B. aufruf(adr(arrayx), sizeof(arrayx));
hier übergibst du einen pointer auf das array und die größe in bytes des arrays. das array selbst ist aber zur koimpilation festgelegt.
hiermit kannst du in einem baustein unterschiedliche arrays bearbeiten.
in der freien lib oscat.lib unter w www.oscat.de w findest du einige beispiele hierzu bei array funktionen
so,
habe mir die oscat275_codesys2.lib heruntergeladen und eingebunden um mir mal das mit dem _array_init anzuschauen.
leider bekomme ich beim übersetzen eine Fehlermeldung:
Was habe ich falsch gemacht, bzw. wie kann man dies beheben?