确定 Unix 或 Windows EOL 字符

Determine Unix or Windows EOL character

我正在读取文件并且有兴趣了解生成该文件的操作系统。它可以是 Windows 或 Unix。我试图通过读取行​​尾字符来确定操作系统。我很难在行尾获取角色。我尝试了以下代码,但它总是 returns -2 而不管操作系统(根据文档是正确的)。感谢您的帮助。

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

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

readkey.
message lastkey.

这假设文件中确实有行尾,所以可能不是一个完美的解决方案(另一方面 - 如果没有 - 你怎么知道)。

我跳过 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.