怎么用c++读取文本文件中的换行符和空格?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用c++读取文本文件中的换行符和空格?相关的知识,希望对你有一定的参考价值。

1.获取文件夹下的文件名
void getAllFiles(string path, vector<string>& files) //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; //很少用的文件信息读取结构 string p; //string类的一个赋值函数:assign(),有很多重载版本 if ((hFile = _findfirst(p.assign(path).append("\\\\*.txt").c_str(), &fileinfo)) != -1) do if ((fileinfo.attrib & _A_SUBDIR)) //比较文件类型是否是文件夹 if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) files.push_back(p.assign(path).append("/").append(fileinfo.name)); getAllFiles(p.assign(path).append("/").append(fileinfo.name), files); else files.push_back(p.assign(fileinfo.name)); //只保存文件名 while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1 _findclose(hFile);

2.数据按行排列,如图所示,将其读入数组
void readRowInToArray(fstream &in, string FilePath, int data[ROW]) in.open(FilePath, ios::in);//打开一个file if (!in.is_open()) cout << "Can not find target file." << endl; system("pause"); string buff; int i = 0; while (getline(in, buff)) data[i++] = atof(buff.c_str()); //end while in.close(); cout << "get data" << endl;

3.数据按列排列,如图所示,将其读入数组
void readColumnInToArray(fstream &in, string FilePath, int data[COLUMN]) in.open(FilePath, ios::in);//打开一个file if (!in.is_open()) cout << "Can not find target file." << endl; system("pause"); char buff; int i = 0; while (!in.eof()) in >> buff; data[i++] = buff - \'0\';//获得数字 //end while in.close(); cout << "get data" << endl;

4.数据为矩阵,如图所示,将其读入矩阵
void readInToMatrix(fstream &in, string FilePath, int data[ROW][COLUMN]) in.open(FilePath, ios::in);//打开一个file if (!in.is_open()) cout << "Can not find " << FilePath << endl; system("pause"); string buff; int i = 0;//行数i while (getline(in, buff)) vector<double> nums; // string->char * char *s_input = (char *)buff.c_str(); const char * split = ","; // 以‘,’为分隔符拆分字符串 char *p = strtok(s_input, split); double a; while (p != NULL) // char * -> int a = atof(p); //cout << a << endl; nums.push_back(a); p = strtok(NULL, split); //end while for (int b = 0; b < nums.size(); b++) data[i][b] = nums[b]; //end for i++; //end while in.close(); cout << "get data" << endl;
参考技术A 可以换个思路:遇到空格后继续读取,但全部过滤,只到遇到一个换行符为止 参考技术B #include "stdio.h"

int main()

FILE *pf=NULL; //文件指针

int filelen=0;
int i=0;
char *buf;
pf=fopen("D:\\test.txt","r"); //以只读方式打开文件
if(pf==NULL)

return 0;

else

//获得文件长度

fseek(pf,0,SEEK_END); //文件指针移到末尾
filelen=ftell(pf); //获得文件当前指针位置,即为文件长度
rewind(pf); //将文件指针移到开头,准备读取

buf=malloc(filelen+1); //新建缓冲区,存储独处的数据
//将缓冲区的数据设置为0
for(i=0;i<filelen+1;i++)
buf[i]=0;

//读取文件
fread(buf,filelen,1,pf);
//关闭文件
fclose(pf);
//buf中即为要读出的数据

printf("%s\n",buf); //输出一下数据,你可以随便怎么用
free(buf); //最后记得要释放

return 1;

使用 Python 将文本文件中的空格转换为换行符

【中文标题】使用 Python 将文本文件中的空格转换为换行符【英文标题】:Convert spaces to newlines in text file using Python 【发布时间】:2019-12-14 16:50:13 【问题描述】:

我有一个如下所示的文本文件:

15.9 17.2 18.6 10.5

我想用 Python 编辑这个文件,使它看起来像这样:

15.9
17.2
18.6 
10.5

这意味着我需要用换行符替换空格字符串并保存文本。

我试过了,但它不起作用:

f = open("testfile.txt", "w")

for line in f:
    if ' ' in line:
        line2 = line.replace(' ' , '\n')
    print(line2)
for i in line2:
    f.write(line2(i))
f.close

line2 的打印已经在工作,但我没有得到一个新的文本文件,其中空格被换行符替换。

如何解决问题并产生所需的输出?

【问题讨论】:

首先,你没有f.close()你的文件。其次,我相信你可以直接写f.write(line2)这行,你不需要重复它。 另外,您有两个单独的 for 循环,在第一个 for 循环中,您不断覆盖 line2。所以唯一被写入的 line2 是循环中的最后一个.. Read and overwrite a file in Python的可能重复 【参考方案1】:
with open("testfile.txt", "r") as r:
    with open("testfile_new.txt", "w") as w:
        w.write(r.read(.replace(' ' , '\n'))

【讨论】:

请注意,这会将整个文件吞入内存。此外,您可以使用with open('testfile.txt', 'r') as r, open('testfile_new.txt', 'w') as w: 并避免阻塞。还有一个语法错误:r.read(.replace(' ' , '\n') 应该是r.read().replace(' ', '\n')。考虑解释为什么 with... 优于 open() 和/或提供一些关于 OP 在他们的代码尝试中做错了什么。 那行不通!!!它会创建一个新文件,这不是 OP 想要的【参考方案2】:

试试这样吧

f = open("testfile.txt", "r")
text=f.read()
f.close()
f=open("testfile.txt", "w+")
text2=''
if ' ' in text:
    text2 = text.replace(' ' , '\n')
    print(text2)
    f.write(text2)
f.close()

【讨论】:

【参考方案3】:

您可以尝试使用字符串替换:

string = string.replace('\n', '').replace('\r', '')

首先: f.close() 不存在。

其次:试试上面的代码。它会将空格替换为新行。

【讨论】:

你也可以尝试不同的组合比如string.replace('\r', ' ' ).replace('\n', ' ')【参考方案4】:

示例:

with open("file1.txt", "r") as read_file:
    with open("file2.txt", "w") as write_file:
        write_file.write(read_file.read().replace(" ", '\n'))

file1.txt 的内容:

15.9 17.2 18.6 10.5

file2.txt 的内容:

15.9
17.2
18.6
10.5

注意:

或者您可以使用splitjoin 方法代替替换。

write_file.write("\n".join(read_file.read().split()))

【讨论】:

【参考方案5】:

str.splitstr.join 一起使用

例如:

with open("testfile.txt", "r") as infile:
    data = infile.read()

with open("testfile.txt", "w") as outfile:
    outfile.write("\n".join(data.split()))

【讨论】:

以上是关于怎么用c++读取文本文件中的换行符和空格?的主要内容,如果未能解决你的问题,请参考以下文章

将文本写入文件,包括空格

在C++中如何读取文本中的数据存储为数组变量?

使用 Python 将文本文件中的空格转换为换行符

用sed 怎么替换包含换行符\n的文本.比如这些

vba读取文本文件不识别换行

C++之文件的读取和写入操作(文本文件和二进制文件)