急。。。。急。。。。急。。。。。。用C如何读一个文本文件的一行,每一行的长度不一样,每一行的中间有空格
用C如何读一个文件(例如:文本文件)的一行,每一行的长度不一样,每一行的中间有空格
例如:
CALLING_NBR CALLED_NBR START_TIME DURATION
8655148 03592296879 2004/02/03 0:01:03 34
8689052 03592868899 2004/02/03 0:02:05 12
8878085 03597529283 2004/02/03 0:03:23 1
8661641 03594033744 2004/02/03 0:01:53 91
问题点数:0、回复次数:15Top
1 楼hslinux(幻世龙)回复于 2004-05-02 08:27:17 得分 0
getline();
具体用法自己查下帮助或多试试几次。
把一行读出来后是一个字符串,再把里面的几个串解析出来就可以了。Top
2 楼pingerp(当仁不让)回复于 2004-05-02 09:03:37 得分 0
假如一行的中间间隔有几个结束符号呢,能否读出一行?Top
3 楼pingerp(当仁不让)回复于 2004-05-02 09:51:52 得分 0
getline();具体怎么用啊,能否举个例子看看Top
4 楼dananhai(大男孩)回复于 2004-05-02 10:00:22 得分 0
#include <stdio.h>
main(void)
{
int i=0;
char ch;
char linebuffer[81];
FILE *fp;
if((fp=fopen("d:\\t1.txt","rb"))==NULL)
{printf("fill not open !");
exit(0);
}
ch=fgetc(fp);
while(!feof(fp)){
if(ch!='\n'){
linebuffer[i++]=ch;
if(i>100)
{printf("error occur!");
exit(0);
}
}
else{
linebuffer[i]='\0';
puts(linebuffer);
i=0;
}
ch=fgetc(fp);
}
fclose(fp);
}
看看是不是这个,是的话给我加分啊!
我没给他写成独立的函数,你自己弄吧意思是这样了。我想一定有好多别的方法,我的可能是最笨的,不过你给的数据到能通过,有毛病请指出。呵呵~~~Top
5 楼cngdzhang()回复于 2004-05-02 12:20:49 得分 0
用
fgets
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char msg[20];
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* write a string into the file */
fwrite(string, strlen(string), 1, stream);
/* seek to the start of the file */
fseek(stream, 0, SEEK_SET);
/* read a string from the file */
fgets(msg, strlen(string)+1, stream);
/* display the string */
printf("%s", msg);
fclose(stream);
return 0;
}
Top
6 楼dananhai(大男孩)回复于 2004-05-02 13:00:33 得分 0
楼上的不能随便抄个例子就来糊弄人啊
函数名: fgets
功 能: 从流中读取一字符串
用 法: char *fgets(char *string, int n, FILE *stream);
程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char msg[20];
/* open a file for update */
stream = fopen("DUMMY.FIL", "w+");
/* write a string into the file */
fwrite(string, strlen(string), 1, stream);
/* seek to the start of the file */
fseek(stream, 0, SEEK_SET);
/* read a string from the file */
fgets(msg, strlen(string)+1, stream);
/* display the string */
printf("%s", msg);
fclose(stream);
return 0;
}
Top
7 楼dananhai(大男孩)回复于 2004-05-02 13:01:44 得分 0
呵呵,请问这个等级是怎么算的Top
8 楼dananhai(大男孩)回复于 2004-05-02 13:05:53 得分 0
有些人不要来片分啊,在这里的点分真容易啊
哎!不容易啊,还有骗子来跟你挣分。呵呵~~~~~~~~~~~Top
9 楼mme(dog)回复于 2004-05-02 13:29:50 得分 0
唉,其实要读一行是很简单的,首先要知道一行的结尾是\r\n不要被楼上的有些人给骗了。
我给出我的函数你看看吧,很简单的东西被一些人复杂化了。
int ReadString(FILE *file, char *str)
{
int len=0;
char ch;
while(1)
{
if(feof(file))
{
*str = '\0';
return -3;
}
ch = fgetc(file);
if((ch == '\r') || (ch == '\n') || (ch == '\0'))
{
if(len == 0) continue;
break;
}
*str = ch;
str ++;
len ++;
}
*str = '\0';
return len;
}Top
10 楼lw549(那个孩子他爹)回复于 2004-05-02 15:28:19 得分 0
fscanf(file,"%s %s %s\n",&arg1, &arg2, &arg3);Top
11 楼pingerp(当仁不让)回复于 2004-05-02 16:33:32 得分 0
文件的每一行中间有不可见的分隔符号,如空格符或者结束符等等,通过什么方法可以知道他们到底是什么字符Top
12 楼Atomictry(天影)回复于 2004-07-20 12:45:46 得分 0
Standard C++ Library:
isalnum() 测试字符是否为数字或字母
isalpha() 测试字符是否是字母
iscntrl() 测试字符是否是控制符
isdigit() 测试字符是否为数字
isgraph() 测试字符是否是可见字符
islower() 测试字符是否是小写字符
isprint() 测试字符是否是可打印字符
ispunct() 测试字符是否是标点符号
isspace() 测试字符是否是空白符号
isupper() 测试字符是否是大写字符
isxdigit() 测试字符是否是十六进制的数字
Top
13 楼datuhao(峡谷)回复于 2004-07-20 12:53:06 得分 0
呵呵,有意思,继续Top
14 楼TalosChen(人生如梦亦如幻)回复于 2004-07-20 13:37:49 得分 0
文本文件的话,看你用什么方法打开,以二进制形式打开的话,回车与换行都是可读的,以文本形式打开的话,回车是不可读的,只有换行是可读的,所以不管怎样,都可以换行来作为一行是否结束的标志。至于判断中间的字符是什么字符,完全可以用一个循环内的switch语句来处理。Top
15 楼skyfine(柳荣宏)回复于 2004-07-20 17:10:49 得分 0
建议getline().mfc有CStdioFile类也有读一行。Top




