C(raspberry)从文本文件中

时间:2015-08-22 15:52:10

标签: mysql sql c

我正在尝试从文本文件中获取数据并将其发送到SQL数据库并继续失败。有时数据到达数据库但我总是遇到分段错误。因此,我首先要集中精力从文本文件中获取正确的数据。

如何为我的SQL行将2行文本和1个日期分成3个单独的字符串?

我的SQL输出将是这个(因为这部分似乎有效..有时):

sprintf(SQLstring,"INSERT INTO TempHumid VALUES(unix_timestamp(now()),%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,'%s','%s',%s)",(temp / 10.0),(rh / 10.0),(light / 500.0),(ph * 10.0),(ligh\
tchk * 1.0),(tab1var1 * 10.0),(tab1var2 * 10.0),(tab1var3 * 10.0),(tab1var4 * 10.0),(tab1var5 * 10.0),(tab1var6 * 10.0),(tab1var7 * 10.0),(tab1var8 * 10.0),(tab1var9 * 10.0),(tab1var10 * 10.0),(text1),(text2),(date));

1 个答案:

答案 0 :(得分:0)

在C语言中,您可以通过以下简单方式逐行阅读文本文件:

(' frow'应该足够大。)

  char *sql;
  char frow[1024];
  FILE *fp;

  fp = fopen( txt_file, "r" );

  while ( fgets( frow, sizeof( frow ), fp ) != NULL ) {
    puts( frow );
  }

  fclose( fp );

然后你就可以爆炸了#fr;'字符串与' strtok'以你需要的方式运作。

以下是一个示例,如何将所需数据插入MySQL数据库:

  if ( asprintf( &sql, "INSERT INTO some_table (col1, col2, col3) VALUES ('%s', '%s', '%s')", a, b, c ) < 0 ) {
        syslog( LOG_ERR, "asprintf error!" );
        return (-1);
  }

  if ( sql_cmd( sql ) < 1 ) {       // my function..
        syslog( LOG_ERR, "MySQL error! %s", mysql_error( conn ) );
  }

  free( sql );

我希望这对你有所帮助。