1. 标准C语言中如何一次读取某文件中的多行数据
有很多种方式可以一次性读取多行数据,具体如何使用,取决于文件内容格式。
一、以fscanf读取。
fscanf读取时,默认会到空白字符截止。所以如果文件中不存在其它空白字符,那么可以以fscanf实现一次性读取多行的效果,比如文件中存储为
1
2.3
name那么要一次版性读取这三行数权据,可以使用:
int a;
float b;
char c[20];
fscanf(fp, "%d%f%s",&a,&b,c);其中,fp为打开该文件的文件指针,
分别将三行数据读取到三个变量a
b
c中。
二、以fread读取。
fread可以一次性读取若干个数据块,所以如果要读取的文件内容总长度已知,那么可以通过fread一次性读取多行。如
this is
for
my test
only.以上数据分4行,包括换行符在内共计25字节。
此时可以使用如下代码一次性读取四行:
char buf[100];
fread(buf, 25, 1, fp);其中fp为打开该文件的文件指针。
2. 现在有一个txt文件,有有多列数据···我只想读取其中两列····用C语言如何实现求高手解答···
上面回答的fgets 是有点问题的:例如:
第一行: xx yy zz 用fgets应该只能读出xx,所以,最好还是用算法保证读取到完整一行,即判断是否读到了'\n'换行符,利用fread读,同时用fseek来定位读取地点:例如:(只是举个例,不保证调试通过哈,懒得去调试)
int offsetBegin=0;
int length=0;
char tmp='a';
while(tmp!=EOF)
{
tmp=fgetchar();// 不停取字符,判断是否是换行符
length++;//取一个字符就长度加1
while(tmp=='\n')//如果是换行符,说明一行到了。
{
fseek(fd,offsetBegin,0);//定位到行首
fread(fd,buf,length,xxxxxx);//读取一行
length=0;//为下次计算一行长度做准备
}
}
如果你知道要读第几行,在里面再加一个变量 low=5,那么每次读出一行后,将countlow++,判断其是否等于low来判断是否是你需要的那一行,如果不是,则不需要fread和fseek,将length=0并直接跳过,开始下行
3. 用C语言如何读取TXT文件中列数据
//其中的in.txt就是你要读取数据的文件,当然把它和程序放在同一目录
-------------------------------------
#include
<stdio.h>
int
main()
{
int
data;
file
*fp=fopen("in.txt","r");
if(!fp)
{
printf("can't
open
file\n");
return
-1;
}
while(!feof(fp))
{
fscanf(fp,"%d",&data);
printf("%4d",data);
}
printf("\n");
fclose(fp);
return
0;
}
4. 如何用C语言,读文件中某行某列的数据。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fileToFile(char *nameSrc, char *nameDes);
char * getLineBuf(int line, int col, int len, char *filename);
/**************************************************************
说明:
1.使用了内存实时分配,可以满足读取任意长度的字符
但是,需要调用时手动释放内存,否则内存泄露。
2.对中文没有判断,会出现乱码。
***************************************************************/
char * getLineBuf(int line, int col, int len, char *filename)
{
char ch;
int l = 1;
char *pT = NULL;
int i = 0;
char *pA = (char *)malloc(sizeof(char)*len+1);
memset(pA, 0x00, sizeof(char)*len+1);
FILE *fp = NULL;
if (!(fp = fopen(filename, "r")))
{
printf("打开文件失败\n");
goto End;
}
while(!feof(fp))
{
if (l == line)
{
fseek(fp, col-1, SEEK_CUR);
i = fread(pA, sizeof(char), len, fp);
if(i<len)
{
printf("字符长度不足!");
pA[i] = '\0';
goto End;
}
if (pT = strstr(pA,"\n"))
{
printf("本行长度不足");
pA[pT-pA] = '\0';
goto End;
}
break;
}
ch = fgetc(fp);
if(ch == '\n')
{
l++;
}
}
if (l+1 < line)
{
printf("文件行数不足");
}
End:
fclose(fp);
return pA;
}
/*******************************************
说明:
1.系统命令的调用,可以查询下DOS命令的使用
2.如果需要复杂的DOS命令,可以使用字符串拼装
********************************************/
int main()
{
int i = 0;
char *s = NULL;
FILE *fp = NULL;
char filename[100];
char buf[100];
memset(buf, 0x00, sizeof(buf));
char *log = "log.txt";
//sprintf(buf, "dir /B %s > %s", "*.txt", log);//字符串拼装
//system(buf);//调用系统命令
system("dir /B *.txt > log.txt");//调用系统命令
fp = fopen(log, "r");
if (fp == NULL)
printf("文件打开失败");
while(!feof(fp))
{
fscanf(fp, "%s", filename);
printf("\n文件=%s\n", filename);
for (i=1; i<=3; i++)
{
s = getLineBuf(i, 1, 2 , filename);
printf("%s\n", s);
if (s)
{
free(s); //手动释放内存,否则内存泄露
s = NULL;
}
}
}
fclose(fp);
system("del log.txt");
return 0;
}
5. 如何用C语言写入或者读取指定某一列的数据
假如,一个数组a[m][n]
取第y行:
for(i=0;i<n;i++)
{
printf("%d ",a[y][i]);
}
取第y列:
for(i=0;i<m;i++)
{
printf("%d ",a[i][y]);
}
6. C语言如何读取两列数据,然后进行简单处理后输出到另一个文件中谢谢!
#include<stdio.h>
intmain()
{
FILE*fp,*fp1;
inta[20][2];
fp=fopen("1.txt","r+");//以可读的方式打开1.txt文件
fp1=fopen("2.txt","w");//以可写的方式打开2.txt文件
inti=0;
while(!feof(fp))//读至文件末尾
{
fscanf(fp,"%d%d",&a[i][0],&a[i][1]);//从文件1.txt中读取数据
i++;
}
intx=0,y=0;
for(intj=0;j<i;j++)
{
x+=a[j][0]*a[j][1];
y+=a[j][1];
}
fprintf(fp1,"%f",(double)x/y);//将结果数据写入2.txt文件
return0;
}//就是讲printf改成fprintf就变成写入文件了
7. 关于C语言中输入多列数据的方法
#include <stdio.h>
#define MAXLINE 10
main(){
int line,arr[MAXLINE][2];
int i;
printf("\nEnter how many line will input:");
scanf("%d",&line);
for(i=0;i<line;i++){
printf("\nEnter %d line 1 number:",i+1);
scanf("%d",&arr[i][0]);
printf("\nEnter %d line 2 number:",i+1);
scanf("%d",&arr[i][1]);
}
for(i=0;i<line;i++){
if(arr[i][0]%arr[i][1])
printf("\nNO");
else
printf("\nYES");
}
getch();
}
8. C语言读取Excel或txt文件中的多类型数据
C语言可以通过两种方法读取CVS或TEXT中的多列数据的某一列
一是用scanf,像你的数据可以定义两个变量,第一个是double
x,第二个为char
s[20];
当然,你可以用结构体,读文件用
fscanf("%lf%s",&x,s);
//这样就可以将第一列读入x,第二列读入s
另一方法,是直读入一行,然后将它分隔到各列中,而分隔方法就多了,可以用sscanf,也可以用strtok,也可以自己写程序逐个字符处理