-> Hier kostenlos registrieren
Hallo zusammen,
seit mehreren Tagen scheitere ich bereits daran, in TC3 eine lange Exceltabelle erfolgreich einzulesen.
Also was mir bisher möglich ist, ist das Excel-File mit Hilfe der FB_Open und FB_Read in einen sehr langen einzelnen String einzulesen.
Nun muss ich diesen String allerdings wieder zerhacken um ihn in ein mehrdimensionales Array entsprechend des ursprünglichen Excel-Files zu bekommen.
Wie kann ich nun mein
FILEDATA : String(30000);
mit einem Pointer von links nach rechts hoch laufen, und dabei jedes einzelne Char auslesen und weiterverarbeiten?
Das bereits existierende Thema: "einzelne CHAR aus String lesen in ST "
https://www.sps-forum.de/codesys-und-iec61131/52285-einzelne-char-aus-string-lesen-st.html
hat mich leider auch nicht richtig vorwärts gebracht.
Mein bisheriger Ansatz:
Freue mich über jede konstruktive Hilfe
seit mehreren Tagen scheitere ich bereits daran, in TC3 eine lange Exceltabelle erfolgreich einzulesen.
Also was mir bisher möglich ist, ist das Excel-File mit Hilfe der FB_Open und FB_Read in einen sehr langen einzelnen String einzulesen.
Nun muss ich diesen String allerdings wieder zerhacken um ihn in ein mehrdimensionales Array entsprechend des ursprünglichen Excel-Files zu bekommen.
Wie kann ich nun mein
FILEDATA : String(30000);
mit einem Pointer von links nach rechts hoch laufen, und dabei jedes einzelne Char auslesen und weiterverarbeiten?
Das bereits existierende Thema: "einzelne CHAR aus String lesen in ST "
https://www.sps-forum.de/codesys-und-iec61131/52285-einzelne-char-aus-string-lesen-st.html
hat mich leider auch nicht richtig vorwärts gebracht.
Mein bisheriger Ansatz:
Code:
FUNCTION_BLOCK FB_SortExcelInputToArray
VAR_INPUT
Datastring : STRING(30000);
END_VAR
VAR_OUTPUT
END_VAR
VAR
countrows: INT :=0;
countcolumns : INT :=0;
ptString : POINTER TO STRING;
strCompareChar :String(1);
ptByteArray : POINTER TO ARRAY[0..30000] OF BYTE;
Dataarray : ARRAY[0..30000] OF BYTE;
ptByteChar : POINTER TO BYTE;
nStringSize : DINT;
nPointPos : DINT;
END_VAR
_____________________________________________________________________________________________
ptByteArray := ADR(Datastring);
nPointPos:=0;
nStringSize := SIZEOF(Datastring);
countrows:=1;
countcolumns:=1;
WHILE nPointPos < nStringSize DO
ptByteChar := ptByteArray^[nPointPos];
ptString := ptByteChar;
strCompareChar := ptString^;
IF strCompareChar ='$N' THEN
countrows:= countrows+1;
nPointPos:=nPointPos+1;
END_IF
IF strCompareChar =';' THEN
countcolumns:=countcolumns+1;
nPointPos:=nPointPos+1;
END_IF
ExcelInputDat[countrows,countcolumns]:= concat(ExcelInputDat[countrows,countcolumns],strCompareChar);
nPointPos:=nPointPos+1;
END_WHILE
Freue mich über jede konstruktive Hilfe
