gpt4 book ai didi

c - 读取 txt 文件时处理 CRLF、CR 和 LF

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:18 25 4
gpt4 key购买 nike

我有一部分 C 代码是在 linux gcc 环境下编译的。

在我的项目中,当读取从不同操作系统创建的 txt 文件时,我必须处理所有 CRLF、CR 和 LF。

我不确定 fscanf() 是否自动处理所有情况。

有没有其他方法可以处理所有情况?

while (fscanf(fp, "%d", &data) != EOF) 
{
printf("%d\n", data);
}

最佳答案

to handle ALL CRLF, CR and LF when reading a txt file created from different OS.

I'm not sure if fscanf() handles all cases automatically.

fscanf() 的某些用法可以像 fscanf(fp, "%d", &data) 一样正常工作,但不是全部。

一个简单的替代方法是使用您自己的 my_fgets() 读取输入的 ,然后调用 sscanf()

char my_fgets(char *s, size_t sz, FILE *fp) {
if (sz < 1) {
return NULL;
}
char *org = s;
bool no_input = true;
int ch = 0;

while (--sz > 0 && (ch = fgetc(fp)) != EOF) {
no_input = false;
if (ch == '\r') {
int ch2 = fgetc(fp);
if (ch2 != '\n') ungetc(ch2, fp);
break;
}
if (ch == '\n') {
break;
}
*s++ = ch;
}
*s = '\0';
if ((ch == EOF) && (no_input || !feof(fp))) return NULL;
return org;
}

my_fgets(buffer, sizeof buffer, fp);
sscanf(buffer, ...);

如果文件以二进制或文本模式打开,这将处理大多数情况。


依赖文本模式和系统相关的行结束转换是不够的,因为代码需要处理至少 3 种情况,其中一些可能与预期的系统相关的行结束不对应。

关于c - 读取 txt 文件时处理 CRLF、CR 和 LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55185828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com