读取文件的代码数据结构(读取文件的代码java)
如何用C语言读取txt文件中的数据到结构体数组中
1、在vscode里面添加了Python文件和用于读取的文本文件。
2、然后在txt文件写上一些内容用于待会的内容读取,随便写上即可。
3、此外,我们还必须要导入os文件,这样才可调用os中的一些文件操作方法。
4、然后打开要进行读取内容的文件,并且把读取到的内容数据复制给了变量a。
5、然后把变量a打印即可把内容给展现出来,方便查阅了。
6、接着运行jy.py文件,这样就会开始读取,打印内容。
7、可以看到文件的内容真的被读取到了。
如何用fread或fscanf读取文件中的不定长数据结构?
用fscanf比较困难,因为你这个是不定长度的,除非所有的结构成员类型都相同,不然,你没办法预知下一个结构成员类型。当然,你也可以做一定的组织,这样也能实现用fscanf读的方式
用fread可以做到,循环读数据,并做分析,直到读取到ID为止
其实整个程序的难点不在于如何去读或者用哪个函数去读,而是你如何组织你的文件中的数据结构
数据结构做好了,用什么方式都可以读的
C语言读取指定行数据
很遗憾,事实上计算机是不可能做到读取txt文件的第n行的时间复杂度为O(1)的。
因为txt文件是“顺序存储”,如图参考自《数据结构》
要读取第n行,必须找到第n-1行 = 则必须找到n-2行 … 必须找到第1行。所以读取第5000行的字符串,只能一行一行找,就好比人类看书,要看到第5000段( txt的第5000行 其实打印出来是第5000段)必须一段一段数,不然只能估计,就不准确了。
如果要以O(1)时间复杂度定位到第N“行”或第N个记录,必须用“索引存储”、“散列存储”等,如数据库文件会用这类存储。具体细节可以学《数据结构》、《数据库原理》等。
参考代码:
#include?stdio.h?
//读取filename文件(路径)、第?whichLine+1?行文本。
char?*?ReadSpeacialLine(char?*filename,?int?whichLine)
{
FILE?*fp;???????
int?currentLine?=?0; //当前读取的行
char?strLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if?((fp?=?fopen(filename,?"r"))?==?NULL)?//判断文件是否存在及可读
{
printf("error!");
return?NULL;
}
while?(!feof(fp))
{
if?(currentLine?==?whichLine)
{
fgets(strLine,?1024,?fp);??//读取一行
//printf("%s",?strLine);?//输出
return?strLine;
}
fgets(strLine,?1024,?fp);??//读取一行,并定位到下一行
currentLine++;
}
fclose(fp);?????????????????????//关闭文件
return?NULL;
}
int?main()?{
//注意?源代码里字符串写"\\",编译之后只是1个\,因为\是转义符号
char?txtFile[]?=?"E:\\新建文本文档.txt";
int?i?=?11;
printf("第%d行\n%s",?i+1
,?ReadSpeacialLine(txtFile,?i)); //ReadSpeacialLine返回的字符串里自带换行
getchar(); //防止结束闪退
return?0;
}
求一个C语言中文件的读取与文件的存储的代码示范
/*读取文件*/
#include?stdio.h
main()
{
????FILE?*fp; /*定义一个指向FILE类型结构体的指针变量*/
????char?ch,?filename[50]; /*定义变量及数组为字符型*/
????printf("please?input?file`s?name;\n");
????gets(filename); /*输入文件所在路径及名称*/
????fp?=?fopen(filename,?"r"); /*以只读方式打开指定文件*/
????ch?=?fgetc(fp); /*fgetc函数带回一个字符赋给ch*/
????while?(ch?!=?EOF) /*当读入的字符值等于EOF时结束循环*/
????{
????????putchar(ch); /*将读入的字符输出在屏幕上*/
????????ch?=?fgetc(fp); /*fgetc函数继续带回一个字符赋给ch*/
????}
????fclose(fp); /*关闭文件*/
}
/*将内容写入文件*/
#include?stdio.h
main()
{
????FILE?*fp; /*定义一个指向FILE类型结构体的指针变量*/
????char?ch,?filename[50]; /*定义变量及数组为字符型*/
????printf("please?input?filename:\n");
????scanf("%s",?filename); /*输入文件所在路径及名称*/
????if?((fp?=?fopen(filename,?"w"))?==?NULL) /*以只写方式打开指定文件*/
????{
????????printf("cannot?open?file\n");
????????exit(0);
????}
????ch?=?getchar(); /*fgetc函数带回一个字符赋给ch*/
????while?(ch?!=?'#') /*当输入"#"时结束循环*/
????{
????????fputc(ch,?fp); /*将读入的字符写到磁盘文件上去*/
????????ch?=?getchar(); /*fgetc函数继续带回一个字符赋给ch*/
????}
????fclose(fp); /*关闭文件*/
}
ply格式文件,用C语言怎么读入,并存储在哪种数据结构中
只要你理解了ply文件的结构,就很容量实现了.
就比如:
BMP图像数据保存是这样的:先保存图像的文件头,再保存图像的信息头,再保存一个颜色表,最后才是图像数据.
(下面就以图像的文件头作详细说明)
图像的文件头的信息如下:
偏移 意义
0-1字节 .BMP文件的标志
2-5字节 给出位图文件的大小
6-7字节 保留并必须置为0
8-9字节 保留并必须置为0
10-13字节 位图阵列的偏移值
那么你想读图像的文件头时,你就可以定义如下的一个结构体来保存读到的数据:
typedef struct
{
char bfType[2]; /*用来保存.BMP文件的标志*/
long bfSize; /*用来保存位图文件的大小*/
int bfReserved1; /*用来保存保留字节*/
int bfReserved2; /*用来保存保留字节*/
long bfOffBits; /*用来保存位图阵列偏移量*/
}BMPHEAD;
这个结构体和上面的图像的文件头的偏移一一对应.
这样读文件时,首先用fopen()函数打开文件,用fread()函数将文件的数据读到结构体中就可以了.
读ply文件时用一样的方法就OK了
数据结构的二叉树实验中怎么读入一个文件,用C++
读入很简单,使用#includefstream, 定义一个流对象,char型的char 型,int型的int型。
但是你对这道题的解释不清楚,我没法给你写代码。