确定Unix或Windows EOL字符

时间:2018-02-02 09:54:17

标签: openedge progress-4gl

我正在阅读文件,并且有兴趣了解生成该文件的操作系统。它可以是Windows或Unix。我试图通过读取行​​尾字符来确定操作系统。我很难让角色在行尾。我尝试了以下代码,但无论操作系统如何(根据文档都是正确的),它总是返回-2。谢谢你的帮助。

def var cLog as char init "myfile.log".

input from value (cLog).
seek input to end.

readkey.
message lastkey.

1 个答案:

答案 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.