C语言 读取特定格式文件

C语言 读取特定格式文件,第1张

27

1 86 50 0 0 111

A 64 45 0 0 1010

B 13 33 0 0 100000

C 22 37 0 0 00000

D 32 39 0 0 10110

......

换行符其实没有必要储存,如果起始行有空格也没有问题,可以在函数中这么改:

fscanf(fp,"%d\n", &n)

fscanf(fp, "%c %d %d %d %d %d %s\n",&(HT[i].elem), &(HT[i].weight), &(HT[i].parent), &(HT[i].lchild), &(HT[i].rchild), str)

则HT[i].elem读入的是序号,如给出的A、B、C、D

fscanf(fp,"%d\n", &n)

HT[i].elem读入的是第一组数字的首位1

其实之所以要使用文件类型,只是为了方便软件认识,让后进行关联。它不是必要的。

比如说 *.doc 文件,默认关联的程序是 Microsoft Word 。关联程序的意思是,你双击这个文件,会自动用 Microsoft Word 打开它。

但这只是默认的,你可以通过下面的步骤来修改打开 *.doc 文件的默认程序:

【在文件上右击-打开方式-选择程序,选择一个软件】,比如说金山的 wps。

那么下次你双击 *.doc 文件,就是用金山 wps 打开了。

综上所述,一种类型的文件,是可以用多种软件打开的(*.doc 可以用 WORD 打开,也可以用 WPS 打开,当然还可以用其他程序打开,这要它能识别文件的格式。)。加上文件类型,可以让程序方便的找到自己能识别的文件。当然,没有文件类型,文件的内容(一串二进制数字)其实是一样的,程序还是能打开的。

比如说有个文件叫 a.doc,你双击它,默认会用 Microsoft Word 打开。

你把它重命名为 a (注意没有文件类型后缀),你双击打, *** 作系统就【不知道】怎么打开这个文件了。

这时候, *** 作系统会跳出一个对话框,让你选择打开这个文件的程序。如果你选择了 Microsoft Word ,还是可以正常打开这个文件的。

但是,这样就很麻烦了,你每次都要在一大堆程序的列表中,选择用一个程序才能打开文件 a。

这才是文件类型真正的作用。

---------------------------------------------------------------------------------------------------------

.doc 文件类型:Microsoft Word 文档(因为 *.doc 类型是 Microsoft 首先定义,才这么叫的)

.xlsx 文件类型:Microsoft Excel 工作(同 *.doc)

.pptx 文件类型:Microsoft PowerPoint 演示文稿(同 *.doc)

现在一般这么叫的:

.doc 文件类型:Word 文档

.xlsx 文件类型:Excel 工作

.pptx 文件类型:PowerPoint 演示文稿

区别就是去掉了公司名字 “Microsoft ”,因为这些文件类型以及很成熟了,很多公司都开发出了能打开这些类型文件的应用程序了,再加上 "Microsoft " 的名字就不合适了。

---------------------------------------------------------------------------------------------------------

上面都是废话,下面是提取文件类型的小程序:

#include <stdio.h>

#include <string.h>

char * getType(char fileName[], char type[])

{

int i=strlen(fileName)-1, j

char ch

for(type[0]='\0'i>=0i--)

{

if(fileName[i] == '.')

{// 遇到文件类型分隔符

for(j=ifileName[j]!='\0'j++)

{

ch = fileName[j]

type[j-i] = ('A'<=ch &&ch<='Z') ? (ch+'a'-'A'): ch

}

type[j-i] = '\0'

break

}

else if(fileName[i] == '/' || fileName[i]=='\\')

{// 遇到目录分割符,退出

break

}

}

return type

}

char * getTypeName(char type[], char typeName[])

{

if(strcmp(".doc", type) == 0)

strcpy(typeName, "WORD 文档")

else if(strcmp(".xlsx", type) == 0)

strcpy(typeName, "Excel 工作表")

else if(strcmp(".pptx ", type) == 0)

strcpy(typeName, "PowerPoint 演示文稿")

else if(strcmp(".txt", type) == 0)

strcpy(typeName, "文本文档")

else

strcpy(typeName, "其他类型文档")

}

int main(int argc, char *argv[])

{

char fileName[300]

char type[10]

char typeName[100]

// 输入文件名,可以包含多层目录路径,可以含空格,按 ctrl + z 停止输入

while(gets(fileName)!=NULL)

{

getType(fileName, type)

getTypeName(type, typeName)

printf("file:[%s] type is [%s,%s]\n", fileName, type, typeName)

}

return 0

}

/*

aa.DOC

bb.xlsx

cc.PPPTS

dd.txt

ee.zzz

*/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11852163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存