C语言处理CSV数据

以下代码为博客

《Python的并行求和例子》:

http://www.cnblogs.com/instant7/p/4312786.html

中并行python代码的C语言重写版。

用C来跑一遍单线程也只需要50秒,比python 开4进程的实现要快6倍多,CPU占用率也只用python的1/4。

看来计算密集型应用还是需要用这些不顺手的老古董来弄的:)

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <time.h>

using namespace std;

char *trim(char *str)
{
    char *p = str;
    while (*p == ‘ ‘ || *p == ‘\t‘ || *p == ‘\r‘ || *p == ‘\n‘)
        p ++;
    str = p;
    p = str + strlen(str) - 1;
    while (*p == ‘ ‘ || *p == ‘\t‘ || *p == ‘\r‘ || *p == ‘\n‘)
        -- p;
    *(p + 1) = ‘\0‘;
    return str;
}

int main(){
    cout<<"start time: ";
    system("Echo %Date% %Time%");
    FILE *fexp, *fpred;
    fexp = fopen("D:\\kaggle\\rain\\train_exp.csv", "r");
    fpred = fopen("D:\\kaggle\\rain\\trainChangeTimePeriod.csv","r");

    char expLine[10240];
    char predLine[10240];

    fgets(expLine, sizeof(expLine), fexp);
    fgets(predLine, sizeof(predLine), fpred);

    double squareErrorSum = 0;
    int rowCnt = 0;
    while(fgets(expLine, sizeof(expLine), fexp)) {
        //printf("%s", expLine);
        fgets(predLine, sizeof(predLine), fpred);
        //printf("%s", predLine);

        char *save_ptr;
        char *expId = trim(strtok_s(expLine, ",", &save_ptr));
        if (expId == NULL) {
            return -1;
        }
        char *exp = trim(strtok_s(NULL, ",", &save_ptr));
        double expVal = atof(exp);
        //printf("%s\t%s\n", expId, exp);

        char *predId = trim(strtok_s(predLine, ",", &save_ptr));
        //printf("%s\n", predId);
        double prob[100];
        rowCnt += 1;
        if (rowCnt % 20000 == 0)
            cout << rowCnt << " finished"<<endl;
        for (int i = 0; i < 70; i++){
            char *temp = trim(strtok_s(NULL, ",", &save_ptr));
            prob[i] = atof(temp);
            squareErrorSum += pow((prob[i]-(i>=expVal)),2);
            //cout<<squareErrorSum<<endl;
        }
    }
    double score = squareErrorSum / (70 * rowCnt);
    cout<<"Score: "<<score<<endl;
    cout<<"end time: ";
    system("Echo %Date% %Time%");
    system("pause");
    return 0;
}

linux的话分割字符串函数要换成:

strtok_r

C/C++对CSV的处理参考自:

《c语言读取csv文件和c++读取csv文件示例分享》

http://www.jb51.net/article/47962.htm

时间: 2024-11-08 18:58:46

C语言处理CSV数据的相关文章

C语言进行csv文件数据的读取

C语言进行csv文件数据的读取: #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #include <math.h> int main(){ FILE *fp = NULL; char *line,*record; char buffer[20450];//20450这个数组大小也要根据自己文件的列数进行相应修改. if((fp = fo

R语言读取csv中的内容

1992年,R语言诞生.R语言是PC和Linux时代的产物,R语言和贝尔实验室开发的S语言类似,R支持一系列分析技术,包括统计分析.预测建模.数据可视化.在CRAN上可以找到众多的扩张包. R软件 的首选界面是命令行界面,通过编写脚本来调用相应的功能函数.同时,它也支持图形界面. R语言可以用来做数据挖掘,下面我们就用它来读取birth2.csv 中的内容. //birth2.csv ALGERIA ,36.4,14.6 CONGO ,37.3,8 EGYPT ,42.1,15.3 GHANA

R语言读取文件数据

R语言读取文件数据 ??1.read.table()函数 2.其他函数的缺省 read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",fill = TRUE, ...)read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",fill =

C语言处理CSV文件的方法(一)

什么是CSV文件 CSV是 Comma-separated values (逗号分隔值)的首字母缩写,它通常是以逗号且不仅限于逗号分隔各个值,我们都叫他CSV. 看下面的例子: China, Shanghai, Pudong, Zhang San, 200000, 1234567 BMW; GER; 300000; RMB; i530 从上面两个例子可以看出,可以用不同的分隔符来分隔数据:数据的类型可以不同:长度任意. 由多行这样的CSV记录组成的文件叫做CSV文件(逗号分隔值文件).当然,他们

MySQL导入csv数据

在工作中经常遇到需要往MySQL数据库中导入开发人员提供的数据,其中一种是csv格式的,导入方式如下: 创建相应的表格 mysql> use kevin; Database changed mysql> CREATE TABLE GeoPC_Places (     -> ISO varchar(2) NOT NULL,     -> Country varchar(50) NOT NULL,     -> Language varchar(2) NOT NULL,     

Android技术10:Java与C语言之间简单数据的传递

由于C语言和Java语言之间很多类型不一致性,因此使用native时,需要数据类型转换.下面演示分别传递整型,字符串,整型数组,Java静态方法传递数据. 1.创建native方法 我们单独创建一个NativeClass类来存放native方法 1 package com.forsta.ndk; 2 3 public class NativeClass { 4 public native int add(int x,int y); 5 public native String showStrin

C语言之查看数据在内存中表现形式

#include<stdio.h> void viewRAM(); void main() { viewRAM(); } //查看内存,打印内存地址 void viewRAM() { int b[5] = { 1, 2, 3, 4, 5 }; //打印内存地址 printf("%x", b); //注意:数组在内存中连续排列的 system("pause"); } 1,在打印内存地址代码后面,右键. 2,选择断点,插入断点. 3,这时断点已经生效. 4,

C语言判断系统数据大/小端存储方式

小端存储:数据的低位部分,存储于存储器的低地址空间里. 大端存储:数据的低位部分,存储于存储器的高地址空间里. 首先,一般PC数据存储方式是小端存储. 基本实现思想是:将存储器中所存的数据按字节以地址顺序输出,与存入数据的高低位进行比较,即得出结论. 实现方法一: 1 #include <stdio.h> 2 int main(void) 3 { 4 short int x; 5 char *arr; 6 7 x = 0x1122; 8 arr = (char *)&x; 9 10 i

2、C语言——C语言组成与数据

C语言组成与数据 组成结构: 组成:若干文件 文件:若干函数 函数:函数头+函数尾 函数头:四部分->函数名+() 函数体:{}+语句 语句:三类语句 类型1->/* */ 类型2->定义语句: 类型3->执行语句: 数据与数据类型 数据四类:常量 变量 表达式 函数与预编译 常量:值不发生变化的量 变量:值随时随地改变的量 表达式:用运算符将数据连接起来的合法式子 函数:调用具有一定功能的函数作为运算量 数据类型四大类:基本类型.构造类型.指针类型.空类型 基本类型:整形int