user-0 提问: 读取txt文件里的数据，有没有通用程序啊？

回复:
user: user-0
content: 谢谢所有楼上的~原来读写个txt也不是那么容易。。。学到了很多东西~~~

user: user-0
content: 引用 26 楼 skyliuxu 的回复:引用 25 楼 darksworld 的回复:[quote=引用 19 楼 skyliuxu 的回复:] [quote=引用 10 楼 darksworld 的回复:] [quote=引用 6 楼 luciferisnotsatan 的回复:] [quote=引用 4 楼 darksworld 的回复:] [quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote] 你每行的格式要一样。比如： abc bcd 123 asd sfsd 1 那你可以用 %s %s %d.  如果你是 c plus plus zero x eleven 2011 c++98 1998  这样的两行两列，那你就只能自己分析了。 [/quote]  1.有没有那种函数：先判断当前要读的是不是某个类型，如果是就读完存到数组，如果不是就跳过。这样的函数？ 2.fgetc这个函数 我看网上介绍是把文件指针向后移动一位，但是我用的时候，它好像可以跳过空格和回车直接到下一个有值的位置啊。。。难道空格和回车在txt文本里面算空值吗？[/quote] 1.这种函数可以有，自己写呗。为什么标准库函数里没有？因为这种需求不必要！没有无谓的分析（除非谁闲的蛋疼），既然你要从一个txt文件里读取内容并用于某种计算或分析，那txt里存储的数据就必然满足一定模式（当然有可能存在无效数据），如果你能确保所有数据都是有效的，读取过程不是很easy么？ 2.空格和回车属于“blank character”, fgetc会跳过它们[/quote] 太对了~话说我小看fscanf了。。它可以直接跳过空格和回车[/quote] 抱歉，上面说错了，貌似fgetc是不会跳过blank character的。fscanf肯定是跳过blank字符的[/quote]  嗯~貌似用一次fgetc(); 文件指针后移一位 正好可以解决空格和回车的问题~~

user: user-1
content: 引用 25 楼 darksworld 的回复:引用 19 楼 skyliuxu 的回复:[quote=引用 10 楼 darksworld 的回复:] [quote=引用 6 楼 luciferisnotsatan 的回复:] [quote=引用 4 楼 darksworld 的回复:] [quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote] 你每行的格式要一样。比如： abc bcd 123 asd sfsd 1 那你可以用 %s %s %d.  如果你是 c plus plus zero x eleven 2011 c++98 1998  这样的两行两列，那你就只能自己分析了。 [/quote]  1.有没有那种函数：先判断当前要读的是不是某个类型，如果是就读完存到数组，如果不是就跳过。这样的函数？ 2.fgetc这个函数 我看网上介绍是把文件指针向后移动一位，但是我用的时候，它好像可以跳过空格和回车直接到下一个有值的位置啊。。。难道空格和回车在txt文本里面算空值吗？[/quote] 1.这种函数可以有，自己写呗。为什么标准库函数里没有？因为这种需求不必要！没有无谓的分析（除非谁闲的蛋疼），既然你要从一个txt文件里读取内容并用于某种计算或分析，那txt里存储的数据就必然满足一定模式（当然有可能存在无效数据），如果你能确保所有数据都是有效的，读取过程不是很easy么？ 2.空格和回车属于“blank character”, fgetc会跳过它们[/quote] 太对了~话说我小看fscanf了。。它可以直接跳过空格和回车[/quote] 抱歉，上面说错了，貌似fgetc是不会跳过blank character的。fscanf肯定是跳过blank字符的

user: user-0
content: 引用 19 楼 skyliuxu 的回复:引用 10 楼 darksworld 的回复:[quote=引用 6 楼 luciferisnotsatan 的回复:] [quote=引用 4 楼 darksworld 的回复:] [quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote] 你每行的格式要一样。比如： abc bcd 123 asd sfsd 1 那你可以用 %s %s %d.  如果你是 c plus plus zero x eleven 2011 c++98 1998  这样的两行两列，那你就只能自己分析了。 [/quote]  1.有没有那种函数：先判断当前要读的是不是某个类型，如果是就读完存到数组，如果不是就跳过。这样的函数？ 2.fgetc这个函数 我看网上介绍是把文件指针向后移动一位，但是我用的时候，它好像可以跳过空格和回车直接到下一个有值的位置啊。。。难道空格和回车在txt文本里面算空值吗？[/quote] 1.这种函数可以有，自己写呗。为什么标准库函数里没有？因为这种需求不必要！没有无谓的分析（除非谁闲的蛋疼），既然你要从一个txt文件里读取内容并用于某种计算或分析，那txt里存储的数据就必然满足一定模式（当然有可能存在无效数据），如果你能确保所有数据都是有效的，读取过程不是很easy么？ 2.空格和回车属于“blank character”, fgetc会跳过它们[/quote] 太对了~话说我小看fscanf了。。它可以直接跳过空格和回车

user: user-0
content: 引用 21 楼 vipcxj 的回复:     //打开文件     ifstream fin("E:\\test.txt");     ofstream fout("E:\\result.txt");       //读取数据到数组Data     int data[10000] = {0};     int i = 0;    while(!fin)    {       fin >> data[i];       fout << data[i++];    }    这个就是LZ所要的？ 	FILE *fp1;  	fp1 = fopen("E:\\test.txt","r"); //读取  	//读取数据到数组Data 	int data[15000]; 	memset(data,0,sizeof(data)); 	int flag=0; 	while(flag<15000)// 	{ 		fscanf(fp1,"%d",&data[flag]); 		flag++; 	}    好像就是这样的。。如果用循环读的话fscanf可以自动跳过空格和回车 如果不用循环，那就只能用fgetc把文件指针指向下一个位置了,fgetc一次只能跳一个空格或者一个回车 是不是这样？

user: user-0
content: 引用 18 楼 zhao4zhong1 的回复:[quote=引用 14 楼 zhao4zhong1 的回复:] Excel 自顶！[/quote]  我只要拿C写的。。。考试要用总得挑个保险的方法。。。

user: user-2
content: 一般按业务逻辑，应该知道这一堆数据应有的格式，文字处理或许全当字串，科学计算全当浮点数未必不可，不大可能是依照文件里的面值去区分...

user: user-3
content: 引用 21 楼 vipcxj 的回复:     //打开文件     ifstream fin("E:\\test.txt");     ofstream fout("E:\\result.txt");       //读取数据到数组Data     int data[10000] = {0};     int i = 0;    while(!fin)    {       fin >> data[i];       fout << data[i++];    }    这个就是LZ所要的？ 哎呀，看错了，原来这是C版

user: user-3
content: //打开文件     ifstream fin("E:\\test.txt");     ofstream fout("E:\\result.txt");       //读取数据到数组Data     int data[10000] = {0};     int i = 0;    while(!fin)    {       fin >> data[i];       fout << data[i++];    }    这个就是LZ所要的？

user: user-4
content: getc万能,自己调整

user: user-1
content: 引用 10 楼 darksworld 的回复:引用 6 楼 luciferisnotsatan 的回复:[quote=引用 4 楼 darksworld 的回复:] [quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote] 你每行的格式要一样。比如： abc bcd 123 asd sfsd 1 那你可以用 %s %s %d.  如果你是 c plus plus zero x eleven 2011 c++98 1998  这样的两行两列，那你就只能自己分析了。 [/quote]  1.有没有那种函数：先判断当前要读的是不是某个类型，如果是就读完存到数组，如果不是就跳过。这样的函数？ 2.fgetc这个函数 我看网上介绍是把文件指针向后移动一位，但是我用的时候，它好像可以跳过空格和回车直接到下一个有值的位置啊。。。难道空格和回车在txt文本里面算空值吗？[/quote] 1.这种函数可以有，自己写呗。为什么标准库函数里没有？因为这种需求不必要！没有无谓的分析（除非谁闲的蛋疼），既然你要从一个txt文件里读取内容并用于某种计算或分析，那txt里存储的数据就必然满足一定模式（当然有可能存在无效数据），如果你能确保所有数据都是有效的，读取过程不是很easy么？ 2.空格和回车属于“blank character”, fgetc会跳过它们

user: user-5
content: 引用 14 楼 zhao4zhong1 的回复:Excel 自顶！

user: user-6
content: m行n列的数据 -->POCO Clang--> struct{...}<---Deserialization <-------- stream

user: user-7
content: 打开文件，复制粘贴到excel中，另存csv格式。

user: user-0
content: 引用 6 楼 luciferisnotsatan 的回复:引用 4 楼 darksworld 的回复:[quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote] 你每行的格式要一样。比如： abc bcd 123 asd sfsd 1 那你可以用 %s %s %d.  如果你是 c plus plus zero x eleven 2011 c++98 1998  这样的两行两列，那你就只能自己分析了。 [/quote]  1.有没有那种函数：先判断当前要读的是不是某个类型，如果是就读完存到数组，如果不是就跳过。这样的函数？ 2.fgetc这个函数 我看网上介绍是把文件指针向后移动一位，但是我用的时候，它好像可以跳过空格和回车直接到下一个有值的位置啊。。。难道空格和回车在txt文本里面算空值吗？

user: user-8
content: 取决于自己解析文本的方式。  引用 8 楼 darksworld 的回复:引用 5 楼 turingo 的回复:那是用法不对，fscanf/fgetc都是可以全部读完的。  [quote=引用 4 楼 darksworld 的回复:] [quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote][/quote]  可是fscanf里面有读取数据类型的参数啊，如果在int数据里面 string类型的数据是随机出现的，那就没办法了吧？[/quote]  引用 8 楼 darksworld 的回复:引用 5 楼 turingo 的回复:那是用法不对，fscanf/fgetc都是可以全部读完的。  [quote=引用 4 楼 darksworld 的回复:] [quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote][/quote]  可是fscanf里面有读取数据类型的参数啊，如果在int数据里面 string类型的数据是随机出现的，那就没办法了吧？[/quote]

user: user-0
content: 引用 5 楼 turingo 的回复:那是用法不对，fscanf/fgetc都是可以全部读完的。  引用 4 楼 darksworld 的回复:[quote=引用 3 楼 turingo 的回复:] 用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote][/quote]  可是fscanf里面有读取数据类型的参数啊，如果在int数据里面 string类型的数据是随机出现的，那就没办法了吧？

user: user-9
content: 如果你在linux下，那么这种case正好是awk的用武之地： http://blog.csdn.net/anzhsoft/article/details/17784019

user: user-10
content: 引用 4 楼 darksworld 的回复:引用 3 楼 turingo 的回复:用fscanf函数。  [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的）   如果txt文件里有字符之类的呢？我试了一下，如果txt里面有字符的话用fscanf好像运行不下去。或者说我读的时候想跳过第i行，或者只读int型的数据其他类型的数据跳过不读，又该怎么办呢？[/quote] 你每行的格式要一样。比如： abc bcd 123 asd sfsd 1 那你可以用 %s %s %d.  如果你是 c plus plus zero x eleven 2011 c++98 1998  这样的两行两列，那你就只能自己分析了。

user: user-11
content: 引用 13 楼 darksworld 的回复:[quote=引用 12 楼 lelieven 的回复:] [quote=引用 楼主 darksworld 的回复:] 一行数据比较好办。如果是m行n列的数据呢？（每n个数据换行一次）数据之间还有k个空格。我就不知道啊该怎么办了。。。求思路。。。（数据是int或者double类型的） http://blog.csdn.net/lelieven/article/details/18038495，看看满不满足你的要求？[/quote]  你这个是char啊。。。。不能读int吧？ 你看下我写的这个 能不能把10000个数（每个数之间有空格，21个数一行）读到数组里。。。。 	//打开文件 	FILE *fp1,*fp2; 	fp1 = fopen("E:\\test.txt","r"); //读取 	fp2 = fopen("E:\\result.txt","w"); //写回  	//读取数据到数组Data 	int data[10000]; 	memset(data,0,sizeof(data));    //声明结果数组    int* Data_result = (int*)malloc(sizeof(int)*10000);    memset(Data_result,0,sizeof(Data_result));  	int flag=0; 	while(flag<10000)//!feof(fp1) 	{ //		if(data[flag]!=' ') //		{ 		fscanf(fp1,"%d",&data[flag]); 		flag++;  //		} 	}  好像fscanf可以跳过空格和换行直接读数据？是这样吗？我试过10个数的情况没有问题，10000个数没发检查了。。。。[/quote]我也不太清楚，对C的文件操作还不是太熟，只写过读取char类型的！