我正在阅读文件,并且有兴趣了解生成该文件的操作系统。它可以是Windows或Unix。我试图通过读取行尾字符来确定操作系统。我很难让角色在行尾。我尝试了以下代码,但无论操作系统如何(根据文档都是正确的),它总是返回-2。谢谢你的帮助。
def var cLog as char init "myfile.log".
input from value (cLog).
seek input to end.
readkey.
message lastkey.
答案 0 :(得分:2)
这假设文件中确实存在行尾,所以可能不是一个完美的解决方案(另一方面 - 如果没有 - 你怎么知道)。
我跳过SEEK
部分。相反,我只是检查文件中的模式。
写作CHR(13)+ CHR(10)类似于可以写成\r\n
的内容。这也可以在Progress ABL中转义~r~n
(见下文)。
DEFINE VARIABLE cFile AS LONGCHAR NO-UNDO.
COPY-LOB FROM FILE "c:\temp\file.txt" TO cFile.
IF cFile MATCHES "*" + CHR(13) + CHR(10) + "*" THEN DO:
MESSAGE "Likely a Windows-file" VIEW-AS ALERT-BOX.
END.
ELSE IF cFile MATCHES "*" + CHR(13) + "*" THEN DO:
MESSAGE "Likely a Mac file" VIEW-AS ALERT-BOX.
END.
ELSE IF cFile MATCHES "*" + CHR(10) + "*" THEN DO:
MESSAGE "Likely a Linux-file" VIEW-AS ALERT-BOX.
END.
ELSE DO:
MESSAGE "I cannot tell what file this is" VIEW-AS ALERT-BOX.
END.
使用转义字符
DEFINE VARIABLE cFile AS LONGCHAR NO-UNDO.
COPY-LOB FROM FILE "c:\temp\file.txt" TO cFile.
IF cFile MATCHES "*~r~n*" THEN DO:
MESSAGE "Likely a Windows-file" VIEW-AS ALERT-BOX.
END.
ELSE IF cFile MATCHES "*~r*" THEN DO:
MESSAGE "Likely a Mac file" VIEW-AS ALERT-BOX.
END.
ELSE IF cFile MATCHES "*~n*" THEN DO:
MESSAGE "Likely a Linux-file" VIEW-AS ALERT-BOX.
END.
ELSE DO:
MESSAGE "I cannot tell what file this is" VIEW-AS ALERT-BOX.
END.