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,也可以自己寫程序逐個字元處理