C语言读取csv大文件以及结果的存储问题

C语言读取csv大文件以及结果的存储问题,第1张

y+=atof(stt[7]); 时,stt[7]的值突然被改变了,第二次循环时,甚至只执行到hx+=atof(stt[6]); stt[6]也被改变了
我认为问题是由于strtok是不安全所导致的,它生成的字符串数组可能被其他线程修改
我建议你用sscanf来读取字符串中的数字,比如:
#include "stringh"
#include "mathh"
void main()
{
FILE fp; /定义一个文件指针/
double sx,yw,wl,hx,yy;
int i;
char str[81];
double score[5];
sx=yw=wl=hx=yy=0;
fp=fopen("分数表csv", "rb"); /打开文件只读/
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s\n",str);
sscanf(str+17,"%lf,%lf,%lf,%lf,%lf",score,score+1,score+2,score+3,score+4);
sx+=score[0];
yw+=score[1];
wl+=score[2];
hx+=score[3];
yy+=score[4];
}
printf("%f,%f,%f,%f,%f\n",sx,yw,wl,hx,yy);
fclose(fp);
}
另外,站长团上有产品团购,便宜有保证

数据matlab可以直接读取的,用data = importdata('你的文件名CSV'); 然后data是一个结构,datatextdata里有你矩阵的文字信息(没有文字信息就是空),datadata就是你的数字信息。10241024刚刚好是10^20,matlab可以读完。但是要是有更多的数据的话,建议先用SPSS处理数据,再把需要的导入matlab中 *** 作。
如果你的情况是要读1024个csv的文件,同样也可以用importdata。但在这之前先用filename=dir(‘这些文件所在的文件夹位置’)读取1024个文件的文件名,然后用
for i = 1:1024

思路:

读取csv文件,每读取一行数据,就插入数据库

示例

文件夹结构

/
 filecsv    //csv大文件,这里只模拟三行数据,不考虑运行效率(PS:csv文件格式很简单,文件一般较小,解析很快,运行效率的瓶颈主要在写入数据库 *** 作)
 indexphp    //php文件

filecsv

singi,20
lily,19
daming,23

indexphp

/
  读取csv文件,每读取一行数据,就插入数据库
 /
//获取数据库实例
$dsn = 'mysql:dbname=test;host=127001';
$user = 'root';
$password = '';
try {
    $db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: '  $e->getMessage();
}
//读取filecsv文件
if (($handle = fopen("filecsv", "r")) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
        //写入数据库
        $sth = $db->prepare('insert into test set name=:name,age=:age');
        $sth->bindParam(':name',$row[0],PDO::PARAM_STR,255);
        $sth->bindParam(':age',$row[1],PDO::PARAM_INT);
        $sth->execute();
    }
    fclose($handle);
}

数据表

CREATE TABLE `test` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8mb4_bin',
`age` INT(10) NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;

运行结束后,数据库中会插入csv中的三行数据

CSV格式文件最大行数是没有上限的,在国外科学数据网站下载的CSV文件有几十G上百G,行数多大几十亿上百亿行;但是大文件CSV打开编辑的软件就基本没有,Excel、wps、openoffice紧支持打开编辑前面1048576行;snapde软件支持的行数多一些,一次可以打开编辑一两千万行的CSV数据,速度超快

CSV文件(Comma-Separated Values,逗号分隔值)是一种常用的电子表格或数据库文件格式,它以纯文本的形式存储数据,各列之间用逗号进行分隔,每行代表一条记录。使用Excel打开CSV文件后,Excel会自动将CSV文件转换为Excel支持的格式,并进行额外的压缩处理,如删除冗余的数据、优化数据结构等。这种处理可以压缩文件大小,减少空间占用,并提高读取速度。但需要注意的是,Excel的处理可能会改变数据格式或自定义格式,因此在存储CSV文件前应该进行备份,以免数据的丢失或转换后的数据无法使用。


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

原文地址: https://outofmemory.cn/yw/13403516.html

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

发表评论

登录后才能评论

评论列表(0条)

保存