如何检查,在一个简单的文本文件中,哪个(ASCII)代码用于换行?

如何检查,在一个简单的文本文件中,哪个(ASCII)代码用于换行?,c,parsing,text,input,ascii,C,Parsing,Text,Input,Ascii,我想在.c-程序中解析一个简单的文本文件,在这里我想对其中的所有换行操作做出反应。不幸的是,用“is character==\n”检查它并不总是有效的 我知道有不同的方法来编码换行符(例如ASCII码中的0x0A),所以我的问题是:是否有一种安全的方法来检查字符是否为LF?换行符是操作系统特有的。在某些操作系统上,它只是\n,在另一些操作系统上,它可能是\r或类似\r\n等的混合物。表单提要\f有时可能会被视为行尾 在某些系统上,不将b模式标志传递给正在改变操作系统读取模式的方式。在这些系统上,

我想在
.c
-程序中解析一个简单的文本文件,在这里我想对其中的所有
换行操作做出反应。不幸的是,用“
is character==\n
”检查它并不总是有效的


我知道有不同的方法来编码换行符(例如ASCII码中的0x0A),所以我的问题是:是否有一种安全的方法来检查字符是否为
LF

换行符是操作系统特有的。在某些操作系统上,它只是
\n
,在另一些操作系统上,它可能是
\r
或类似
\r\n
等的混合物。表单提要
\f
有时可能会被视为行尾

在某些系统上,不将
b
模式标志传递给正在改变操作系统读取模式的方式。在这些系统上,文件将以二进制模式(带
b
)打开,而以文本模式(文本模式可能意味着对行尾的解释不同)打开。您还可以将终止字符作为空格使用和处理(例如,use…)

顺便说一句,在Linux上,该命令可能很有用

此外,您的应用程序可能会在其他操作系统上生成文本文件(无需转换)。我会使用
getline
(或者旧的,如果你不关心很长的行),并处理所有空格字符(制表符、换行符、formfeed、return等…),就像或
sscanf
一样


我不明白为什么真正的行尾标记对你很重要;为什么不能使用
getline
(或者可能是
fgets
)并平等地处理每一个“行尾”字符(无论是
\n
\r
\f
或者它们的一些组合)(换句话说,就像用
isspace
测试的空格一样)。这将处理在Windows或MacOSX上编辑并传递给Linux或Linux的文本文件的情况。

行尾标记是特定于操作系统的。在某些操作系统上,它只是
\n
,在另一些操作系统上,它可能是
\r
或类似
\r\n
等的混合物。表单提要
\f
有时可能会被视为行尾

在某些系统上,不将
b
模式标志传递给正在改变操作系统读取模式的方式。在这些系统上,文件将以二进制模式(带
b
)打开,而以文本模式(文本模式可能意味着对行尾的解释不同)打开。您还可以将终止字符作为空格使用和处理(例如,use…)

顺便说一句,在Linux上,该命令可能很有用

此外,您的应用程序可能会在其他操作系统上生成文本文件(无需转换)。我会使用
getline
(或者旧的,如果你不关心很长的行),并处理所有空格字符(制表符、换行符、formfeed、return等…),就像或
sscanf
一样


我不明白为什么真正的行尾标记对你很重要;为什么不能使用
getline
(或者可能是
fgets
)并平等地处理每一个“行尾”字符(无论是
\n
\r
\f
或者它们的一些组合)(换句话说,就像用
isspace
测试的空格一样)。这将处理在Windows或MacOSX上编辑并传递给Linux或Linux的文本文件的情况。

我建议只作为文本文件打开,并依赖标准库的内置转换来处理此问题。只需使用
fgets()
读取行,就可以了。

我建议只打开文本文件,并依靠标准库的内置转换来处理此问题。只需使用
fgets()
读取行即可。

好,这里是每种操作系统类型的换行代码列表:

Linux系统: LF-LF(换行符'\n',0x0A,十进制为10)

Unix系统: LF-LF(换行符'\n',0x0A,十进制为10)

Windows系统: CR后跟LF(CR+LF,'\r\n',0x0D0A)

Mac OS系统: LF:线路馈电,U+000A

安卓系统: LF-LF(换行符'\n',0x0A,十进制为10)

Unicode系统: Unicode标准定义了许多符合标准的应用程序应识别为行终止符的字符:[3]

LF:    Line Feed, U+000A
VT:    Vertical Tab, U+000B
FF:    Form Feed, U+000C
CR:    Carriage Return, U+000D
CR+LF: CR (U+000D) followed by LF (U+000A)
NEL:   Next Line, U+0085
LS:    Line Separator, U+2028
PS:    Paragraph Separator, U+2029
基于:

好这里是每种操作系统类型的换行代码列表:

Linux系统: LF-LF(换行符'\n',0x0A,十进制为10)

Unix系统: LF-LF(换行符'\n',0x0A,十进制为10)

Windows系统: CR后跟LF(CR+LF,'\r\n',0x0D0A)

Mac OS系统: LF:线路馈电,U+000A

安卓系统: LF-LF(换行符'\n',0x0A,十进制为10)

Unicode系统: Unicode标准定义了许多符合标准的应用程序应识别为行终止符的字符:[3]

LF:    Line Feed, U+000A
VT:    Vertical Tab, U+000B
FF:    Form Feed, U+000C
CR:    Carriage Return, U+000D
CR+LF: CR (U+000D) followed by LF (U+000A)
NEL:   Next Line, U+0085
LS:    Line Separator, U+2028
PS:    Paragraph Separator, U+2029
基于:
尝试使用
\r\n
而不是
\n

\n
=10的ASCII码和
\r
=13的ASCII码。因此,在简单文本文件中,换行是\r\n(回车和换行)的组合。

尝试使用
\r\n
而不是
\n

\n
=10的ASCII码和
\r
=13的ASCII码。因此,在简单文本文件中,换行符是\r\n(回车符和新行)的组合。

如果c==10
?字符基本上是整数,“is character==\n”并不总是有效。为什么?@Sathish idk。它捕捉到了一个清晰的线反馈,但有时却没有。你为什么要问?为什么重要?@Himanshu:不,如果c==10,你就不能:
?字符基本上是整数,“is character==\n”并不总是有效。为什么?@Sathish idk。它捕捉到了一个清晰的线反馈,但有时却没有。你为什么要问?为什么这很重要?@Himanshu:不,你不能:是否有一个标准的查询可以捕获所有的数据?那么,是否有一个列表可以列出所有设置LF的可能性?至少在查询中对它们进行硬编码?首先感谢您的帮助。这个