首页 > 其他分享 >C语言读取通达信数据

C语言读取通达信数据

时间:2024-04-18 17:33:20浏览次数:22  
标签:fp 读取 stockArr int fread C语言 通达信 date close

因为无法事先知道数据的行数,只能通过计算得到,所以数组创建只能通过动态分配内存。

一个解决方案是,我只想读取最后1000行,那么数组就可以直接定义大小为1000,然后把文件指针定位到倒数1000行。

#include <stdio.h>
#include <stdlib.h>

struct Stock {
    int date;
    float open;
    float high;
    float low;
    float close;
    float amount;
    int volume;
    int reserved;
};

int main() {
    FILE *fp = fopen("sz000001.day", "rb");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }
    fseek(fp, 0, SEEK_END);          // 定位文件末尾
    long file_size = ftell(fp);      // 获取文件大小
    int line_count = file_size / 32; // 计算行数(假设每行32字节)
    fseek(fp, 0, SEEK_SET);          // 回到文件开头
    // 动态分配内存
    struct Stock *stockArr = malloc(line_count * sizeof(struct Stock));
    if (stockArr == NULL) {
        perror("Error allocating memory");
        return -1;
    }
    int date, open, high, low, close, volume, reserved;
    float amount;
    int i = 0;
    for (int i = 0; i < line_count; i++) {
        // 读取数据
        fread(&date, 4, 1, fp);
        fread(&open, 4, 1, fp);
        fread(&high, 4, 1, fp);
        fread(&low, 4, 1, fp);
        fread(&close, 4, 1, fp);
        fread(&amount, 4, 1, fp);
        fread(&volume, 4, 1, fp);
        fread(&reserved, 4, 1, fp);

        // printf("Date: %d, Open: %d, High: %d, Low: %d, Close: %d, Amount: %f, Volume: %d, Reserved: %d\n", date, open, high, low, close, amount,
        //        volume, reserved);
        stockArr[i].date = date;
        stockArr[i].open = open / 100.0;
        stockArr[i].high = high / 100.0;
        stockArr[i].low = low / 100.0;
        stockArr[i].close = close / 100.0;
        stockArr[i].amount = amount / 10000.0;
        stockArr[i].volume = volume;
        stockArr[i].reserved = reserved;

        // printf("Date: %d, Open: %.2f, High: %.2f, Low: %.2f, Close: %.2f, Amount: %.2f, Volume: %d, Reserved: %d\n", stockArr[i].date,
        //        stockArr[i].open, stockArr[i].high, stockArr[i].low, stockArr[i].close, stockArr[i].amount, stockArr[i].volume, stockArr[i].reserved);
    }
    printf("%d", stockArr[line_count-1].date);

    free(stockArr); // 释放动态分配的内存
    fclose(fp);     // 释放文件

    return 0;
}

 

标签:fp,读取,stockArr,int,fread,C语言,通达信,date,close
From: https://www.cnblogs.com/yuyanc/p/18144052

相关文章

  • pandas读取sql文件出现:告警UserWarning: pandas only supports SQLAlchemy connectabl
    ​错误原因:导入sql的方式更新了解决方法:importpandasaspdfromsqlalchemyimportcreate_engineMYSQL_HOST='localhost'MYSQL_PORT='3306'MYSQL_USER='root'MYSQL_PASSWORD='123456'MYSQL_DB='cldk_data'engine=......
  • c语言 *p和**p的区别
    前言:先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。上面就段理解了,p和p的区别就不难解释了。p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“*”是解引用操作符,你可以把它理解成打开盒子,p就是......
  • c语言程序实验——实验报告六
    c语言程序实验————实验报告六实验项目名称:实验报告6循环结构程序设计(for语句的应用)实验项目类型:验证性实验日期:2024年4月15日一、实验目的1.熟练掌握三种循环语句并能正确运用;2.能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;3.进一步学习程序调试;4.了解......
  • c语言程序实验——实验报告五
    c语言程序实验————实验报告五实验项目名称:实验报告5循环结构程序设计(while、dowhile语句的应用)实验项目类型:验证性实验日期:2024年4月11日一、实验目的1.熟练掌握三种循环语句并能正确运用;2.能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;3.进一步学习程......
  • Python Flask+Pandas读取excel显示到html网页: CSS控制表格样式、表头文字居中
    前言全局说明CSS控制表格样式一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563Pandas安装https://www.cnblogs.com/wutou/p/17811839.htmlPandas官方API说明https://pand......
  • Python读取和生成excel文件
    在Python中,你可以使用第三方库来读取和生成Excel文件。其中,最常用的库是pandas/openpyxl和xlwt/xlrd。Pandas安装Pandas库:pipinstallpandas要读取Excel文件,你可以使用pandas的read_excel函数。下面是一个示例代码,演示了如何使用pandas读取Excel文件中的数据:importpan......
  • java多线程 读取list--动态读取list
    java多线程读取list--动态读取list的案例 本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情......
  • java多线程 读取变量同步安全的案例
    本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情况下一直无法跳循环,从而使得其他线程无法给获......
  • C语言连点器
    起因是想起前段时间玩mc挖大量石头要一直按左键怪累的,就有了想整个连点器的想法,不过在网上找半天都没有满意的,要么太臃肿,要么"VIP",要么广告满天飞。。。受不了了,想了想好像自己写一个也不是很难使用c语言编写,因为可以自动生成.exe文件还是挺方便的使用示例:在https://5vmc.co......
  • C++的介绍及与C语言的对比
    目录一.C语言与C++二.面向过程和面向对象三.C++的应用领域四.Cpp的运行和标准1.编译型语言和解释型语言2.C++的运行过程及相关文件解释一.C语言与C++C语言C语言是为开发Unix系统而创建的语言,它是一种面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它贴近硬件,运行......