-> 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