怎么用c++读取文本文件中的换行符和空格?
3个回答
2018-08-23 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517192
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
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;}
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;}
展开全部
可以换个思路:遇到空格后继续读取,但全部过滤,只到遇到一个换行符为止
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询