用c语言如何读入并使文本文件按某一列排序输出?

作者&投稿:阚富 (若有异议请与网页底部的电邮联系)
如何用C语言将文本文件中内容读入程序,并按照第二列的数据进行从大到小排序。~


#include #include #include typedef struct stt{ char c1[9]; int c2; struct stt *next;}STT;void readFile(FILE *fp);void writeFile(FILE *fp);void printfSTT();//打印链表void px();//将链表按c2降序排列STT *sttHead=NULL,*sttTail=NULL;int main(){ FILE *fp; if((fp=fopen("c:\\list.txt","rt+"))==NULL) { printf("can't open File!"); exit(1); } sttHead=(STT *)malloc(sizeof(STT)); sttHead->next=NULL; readFile(fp); printfSTT(); px(); printf("-----------排序后-------------
"); printfSTT(); writeFile(fp); return 0;}void px(){ STT *sttHeadSave1=sttHead,*sttHeadSave2=NULL,sttSave,*nextSave; while(sttHeadSave1->next!=NULL) { sttHeadSave2=sttHeadSave1->next; while(sttHeadSave2->next!=NULL) { if((sttHeadSave1->next->c2)next->c2)) { sttSave=*(sttHeadSave1->next); nextSave=sttHeadSave1->next->next; *(sttHeadSave1->next)=*(sttHeadSave2->next); sttHeadSave1->next->next=nextSave; nextSave=sttHeadSave2->next->next; *(sttHeadSave2->next)=sttSave; sttHeadSave2->next->next=nextSave; } sttHeadSave2=sttHeadSave2->next; } sttHeadSave1=sttHeadSave1->next; }}void printfSTT(){ STT *sttHeadSave=sttHead; printf("-----------打印链表-------------
"); while(sttHeadSave->next!=NULL) { printf("%s %d
",sttHeadSave->next->c1,sttHeadSave->next->c2); sttHeadSave=sttHeadSave->next; }}void readFile(FILE *fp){ int c2; char c1[9]; STT *sttNew; fseek(fp,0,SEEK_SET); printf("-----------读取文件到链表-------------
"); while(fscanf(fp,"%s %d",c1,&c2)!=-1) { sttNew=(STT *)malloc(sizeof(STT)); sttNew->next=NULL; strcpy(sttNew->c1,c1); sttNew->c2=c2; if(sttHead->next==NULL) sttHead->next=sttNew; else sttTail->next=sttNew; sttTail=sttNew; }}void writeFile(FILE *fp){ fseek(fp, 0, SEEK_SET); fseek(fp, 0, SEEK_END); printf("-----------开始写入文件-------------
"); STT *sttHeadSave=sttHead; fprintf(fp,"%s","-----------排序后-------------
"); while(sttHeadSave->next!=NULL) { fprintf(fp,"%s %d%s",sttHeadSave->next->c1,sttHeadSave->next->c2,"
"); sttHeadSave=sttHeadSave->next; } printf("------------写入完成-------------
");}

1.用fgets函数可以读取文件中某行的数据,某列数据就必须一个一个读入每行的第几个字符,再存入到一个字符串当中。2.例程:
#include#includevoid main(){ char a[100],b[100],c[100]; int i=3,j=4,k=0; //第三行,第四列 FILE *fp = fopen("data.txt","r"); while(fgets(c,100,fp)){ //读入每行数据 i--; if(i==0) strcpy(a,c); //读到第三行数据 b[k++]=c[j-1]; //把每行的那列字符拷到b中 } b[k]=0; printf("第%d行数据:%s
",i,a); printf("第%d列数据:%s
",j,b); fclose(fp);}3.遇到此问题,如果此功能不是应用软件的一部分,则可以通过批处理的for循环命令来进行提取,相对比使用c语言效率。

  1. 使用文件操作函数打开文件,读取信息,进行排序,重新写入并覆盖原文件。

  2. 例程:

    #include <stdio.h>
    #include <stdlib.h>
    int comp(const void* a,const void* b){
        return *(int*)a-*(int*)b;    
    }
    int main(){
        FILE *p;//文件指针
        int i,j,a[1000];
        p = fopen("文件名称", "r");//第一个字符串是你文件路径,路径中的\要写成\\,文件名必须带后缀
        for(i=0;fscanf(p,"%d",a+i)!= EOF;i++);//EOF为文件尾(end of file),读取文本中的数据  
        qsort(a,i,sizeof(int),comp); //由小到大排序,比较方式由comp函数指定。
        fclose(p);
        p = fopen("文件名称", "w");//以写入方式重新打开
        for(j=0;j<i;j++) fprintf(p,"%d ",a[j]);//重新输入排序后的数据  
        fclose(p)
        return 0;
    }


你可以酱紫:

# include <stdio.h>

int main(void)
{
    FILE *p;//文件指针
    char ch[1000];//1000你可以改滴~
    int i = 0;
    
    p = fopen("", "r");//第一个字符串是你文件路径,路径中的\要写成\\,文件名必须带后缀
    if (!p)//如果文件打开失败,fopen返回NULL(0)
    {
        printf("打开文件失败!
");
        exit(-1);
    }
    while(ch[i-1] != EOF || i=1000)//EOF为文件尾(end of file)
    {
        ch[i] = getc(p);//向p指向的流中读一个字符,并将文件指针后移一位,返回值为读到的字符的ASCII码
        i++;
    }
    //下面你就可以对数组处理了
    //或者你可以处理一行,读一行.但是我不知道你想咋处理,就这样写了

    return 0;
}



c语言是如何从键盘读入数据存入变量的?又如何把取变量的值输出到屏幕...
首先,要从键盘读取数据并存入变量,我们可以使用scanf()函数。这个函数可以从标准输入(通常是键盘)读取数据,并根据指定的格式将其存入变量中。例如,如果我们想要读取一个整数并将其存入变量x中,可以使用以下代码:c include int main() { int x;printf("请输入一个整数:");scanf("%d", &x);...

用c语言如何读入并使文本文件按某一列排序输出?
使用文件操作函数打开文件,读取信息,进行排序,重新写入并覆盖原文件。例程:include <stdio.h>#include <stdlib.h>int comp(const void* a,const void* b){ return *(int*)a-*(int*)b; }int main(){ FILE *p;\/\/文件指针 int i,j,a[1000]; p = fopen("文件名称", ...

C语言中如何读取文件中的汉字并将其存入数组中?
按字符方式读取文件,每读一个字符判断一下是否为汉字编码(<0),若是则存入字符数组,不是则跳过读取下一个字符,直到文件结束。设原文件在当前目录下,名为123.txt,举例代码如下:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"#include "stdlib.h"int main(...

C语言中如何把一个文件读入内存?
用C语言实现将一个文件读入内存方法:include <stdio.h> include <stdlib.h> int filelength(FILE *fp);char *readfile(char *path);int main(void){ FILE *fp;char *string;string=readfile("c:\/c.c");printf("读入完毕\\n按任意键释放内存资源\\n");\/\/printf("%s\\n",string);system("...

C语言如何从txt文件中读入汉字并将其存在字符串数组中?...
int main(int argc, char * argv[]){ FILE *fp;char buf[MAXSIZE];fp = fopen(".\/hanzi.txt","r");if(fp == NULL){ perror("call to fopen!");exit(1);} fread(buf,1,MAXSIZE,fp);printf("%s\\n",buf);return 0;} 附 hanzi.txt文件内容:你好,很高兴认识你!希望你的人生...

如何使用C语言选择性读入txt数据并写入excel
函数处理描述 void denglu();登陆函数;用for语句控制密码输入次数。void xuanze();选择要进入的选项 输入序号选择进入模块;void inputinfo();输入信息;用if语句判断能否继续输入信息,根据提示输入信息 void outputinfo();输出信息;用for循环输出基本信息 void find();查询信息;利用for循环进行查找,...

c语言如何从文件读入,并存放在链表中
\/\/举个单链表的例子,首先定义链表成员的结构体 struct filetext{char buf[BUFSIZE];struct filetext *next;};\/\/读取文件,并插入进链表的函数,filename为要读取的文件名,head为链表的头节点,函数返回插入新节点后链表的头节点 struct filetext * readfile(char * filename,struct filetext * ...

C语言如何读取C:\\a.txt中的数据,并赋值到变量?
if ( fp=fopen("c:\\\\a.txt","r") ){ for ( i=0,n=0;i<100;i++ ){ fgets(buffer,256,fp);sscanf(buffer,"%d %s %f %f %f",&number[i],name[i],&score[i][0],&score[i][1],&score[i][2]);n++;if ( feof(fp) ) break;} fclose(fp);} if ( n>0 )for ( ...

C语言怎么从TXT文件中读入数据?
1.用"记事本"创建a.txt文件,保存在一个文件夹中,设保存在d:\\之下 2.编写程序,并运行 include <stdio.h> int main( ){ int a[10][4]; \/*假定不超过10行,每行一定有4个元素*\/ int i,j;FILE *fp;\/*打开文件*\/ fp=fopen("d:\\\\a.txt","r"); \/*假设a.txt在d盘根目录下*\/ ...

在C语言中,如何将EXCEL或者文档中的数据读入程序中?
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。当 IMEX=2 时为“连结模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。3.OleDbConnection myConnection = new OleDbConnection(myConn);4.string mySQLstr = "SELECT f1,f2,f5 FROM [Sheet1$]...

安泽县19337916665: 用c语言如何读入并使文本文件按某一列排序输出? -
坚承申达: 你可以酱紫:# include <stdio.h> int main(void) { FILE *p;//文件指针 char ch[1000];//1000你可以改滴~ int i = 0; p = fopen("", "r");//第一个字符串是你文件路径,路径中的\要写成\\,文件名必须带后缀 if (!p)//如果文件打开失败,fopen返...

安泽县19337916665: 怎么用c语言实现读取一个.txt文件里的数据并要按行读出来? -
坚承申达: /*假设你的数据文件是d:\ttt.txt 用循环把数字读到数组a里面顺便显示出来 */#include <stdio.h> int main() { double a[100]; int i=0; FILE* fp; if((fp=fopen("d:\\ttt.txt","r"))==0) { printf("无文件!!\n"); return -1; } while(!feof(fp)) { fscanf(fp,"%lf",&a[i]);printf("%lf\n",a[i]); i++; } fclose(fp); return 0; }

安泽县19337916665: 如何利用c语言打开文本文件? -
坚承申达: C程序语言非常强大,通过打开文本的函数(里面的参数指出要打开文本的位置及文件名),即可打开相应的文本. 第一,包含的头文件:#include <stdio.h>,这是一个输入输出函数,第二,打开文本文件:FILE *file = fopen("c:\\1.txt","r"...

安泽县19337916665: C语言编程:读取文本指定内容并输出到指定文件,如何实现? -
坚承申达: #includemain() { FILE *fp; /*建立文件指针*/ char c[10]="abcdef" ; fp=fopen("c:\\kk.txt","w"); /*将文件指针指向C盘 的 kk.txt文件*/ fprintf(fp,"%s",c); /*将字符串内容输出到文件中*/ fclose(fp); /*关闭文件*/ }

安泽县19337916665: 请问一下 怎么用c语言实现读取一个txt文件里的数据 要按行读出来 -
坚承申达: fopen以"r"方式打开文件.然后循环以fgets读取. 这个函数是一次读一行的.然后输出就好.读到EOF fgets会返回NULL 退出并关闭文件就好.

安泽县19337916665: C语言如何读取文件中指定的某一段 -
坚承申达: 使用fread函数读取指定长度的字符串,即使包含\n也会被读取,可以首先使用fseek定位到文件结尾,然后ftell函数返回的值就是文件的大小,这样就可以用循环多次读取文件,直到读取所有内容 FILE *file = NULL; char szFile[1025] = {0}; int ...

安泽县19337916665: c语言读入一行文本并按要求分割(在线等) -
坚承申达: 这个没个不行啊 结构提是啥?struct{intchar[]char[]intintintintcharintchar}这样? ==================================#include <stdio.h>#include <stdlib.h>#include <time.h>//2 bbb 女 156 50 2 12 # 003 #typedef struct __tmpsct__{ int numa; ...

安泽县19337916665: C语言怎样读取文本文件? -
坚承申达: 1,获取磁盘文件列表,将n个文件路径名字存放在array[n]中; 2,产生0~n之间的随机值i,访问array[i]即可; ~

安泽县19337916665: 如何在C程序中访问文本文档,并读取数据 -
坚承申达: 用到的C 函数fgets fopen fclose fgets 的具体用法为: fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc 表头文件 include 定义函数 char * fgets(char * s,int size,FILE * stream); 函数说明 fgets()用来从参数stream所指的文件内...

安泽县19337916665: 如何用C读取文本文档中的某一行 -
坚承申达: 没有能读一行的吧,如果能用C语言实现你的要求,加分的话我给你做.先说明我不会读一行的,因为一行有大小,比如你打开一个文本,当你缩小的时候行数会增多,放大文本的时候行数就减小,这样你怎么能保证每次读出的数据都一样呢? ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网