IF hFile <> RTS_INVALID_HANDLE THEN WHILE byteRead <> 44 DO //44为ASCII十进制数值代码中的逗号符号(‘,’) udiBytesRead := SysFileRead(hFile:= hFile, pbyBuffer:= ADR(byteRead), ulSize:=1, pResult:=ADR(udiReadError1)); IF byteRead = 44 OR udiBytesRed = 0 THEN
byteRead := 0;
EXIT;
END_IF
tWord := BYTE_TO_WORD(byteRead); //将字节数转成WORD类型
tStr := WORD_AS_STRING(tWord,FALSE); //将WORD类型数据转成字符串
strNum := CONCAT(strNum,tStr); //进行字符串拼接
END_WHILE
StrTrimA(ADR(strNum)); //删掉字符串中前导和末尾的空格
ReadDataFun.lrNum := strNum; //返回读取的cvs字符串
SysFileGetPos(hFile, ADR(pppPos)); //获取文件指针的当前位置
IF pppPos >= dwLength THEN //判断当前位置是否大于文件中的字符串总长度,可由此判断是否读取完毕
ReadDataFun.bEnd := TRUE;
ELSE
ReadDataFun.bEnd := FALSE;
END_IF
END_IF
写文件函数
FUNCTION WriteDataFun : BOOL
VAR_INPUT
hFile: RTS_IEC_HANDLE:= RTS_INVALID_HANDLE;
lWriteData: string;
END_VAR
VAR
udiBytesWrite: __XWORD;
udiWriteError: RTS_IEC_RESULT;
strWriteData: STRING(10);
cycleNum: DINT;
num: DINT;
byteWriteBuffer: ARRAY[0..9] OF BYTE;
END_VAR
IF hFile <> RTS_INVALID_HANDLE THEN
//'$R'是回车符,'$N'是换行符,可通过WORD_AS_STRING转换得到,例如WORD:= 10(10是由ASCII码对应的十六进制数16#0a转化的十进制数),转换后得到string:= '$N',可查询ASCII码表
WriteDataFun:= FALSE;
strWriteData:= CONCAT(lWriteData,','); //字符串后面接上逗号
StrTrimA(ADR(strWriteData)); //删除字符串前导和末尾的空格
cycleNum:= StrLenA(ADR(strWriteData)); //计算字符串长度
FOR num:= 0 TO cycleNum DO
byteWriteBuffer[num]:= strWriteData[num]; //将字符串内容转换成字节数组
END_FOR
udiBytesWrite:= SysFileWrite(hFile:= hFile, pbyBuffer:= ADR(byteWriteBuffer), ulSize:= SIZEOF(byteWriteBuffer), pResult:= ADR(udiWriteError));
WriteDataFun:= TRUE;
END_IF
展示结果
领取文件
关注微信公众号回复:codesys
----------------------------------------codesys工程ST语言学习笔记(二)写文件操作与添加库方法------------------------------------ ----------------------------------codesys工程ST语言学习笔记(三)读文件操作txt,访问hello world 文件--------------------------