gpt4 book ai didi

c - 从csv文件中读取错误的数字 '\n'

转载 作者:行者123 更新时间:2023-11-30 15:40:30 30 4
gpt4 key购买 nike

函数读取csv文件,用空字符替换分隔符并计算列和换行符的数量,但返回错误的“\n”数量,我不知道为什么?请帮忙!

在代码末尾注释:应该是 24643 - 实际是 24687

示例数据:我在必要时手动添加了“,”分隔符以显示列更改。

产品,23659,LAUX431GDS X431,图形诊断扫描工具,P,LAUX431GDS,CANDO INTERNATIONAL,右,OE级访问国内、欧洲和亚洲制造商,用于读取/清除代码、实时数据图形和双记录定向测试和模块编码(将提供用于 4 channel 示波器、点火分析仪、传感器模拟器和万用表的单独模块)

  • 所有车辆系统及其模块的诊断访问和通信速度无与伦比。支持 Wifi,允许您访问您喜爱的网站以获取故障排除建议、图表和维修信息。
  • 一键更新,一次更新一个或多个汽车系列
  • 无需连接到电脑进行更新,所有补丁和软件更新都直接通过您进行订阅每年该工具都会更新。
  • 包括第一年的更新

        int getCurrentData(FILE *current){

    int totalChars = 0, colCount = 0, productCount = 0;
    char *buffer = NULL, next = '\0';
    size_t i = 0;

    fseek(current, 0, SEEK_END);
    size_t fileSize = ftell(current);
    rewind(current);

    buffer = malloc(fileSize);
    fread(buffer, fileSize, 1, current);

    /*replacing delimiter with null character*/
    for (i = 0; i < fileSize; i++){
    if (buffer[i] == ',' && buffer[i+1] != ' '){
    buffer[i] = '\0';
    }
    }
    /*finds column and product count*/
    for (i = 0; i < fileSize; i++){
    if (buffer[i] == '\0' && productCount == 0 || buffer[i] == '\n' && productCount == 0){
    colCount++;
    }
    if (buffer[i] == '\n' && i < fileSize){
    productCount++; /*should be 24643 - actual 24687*/
    }
    }

    return productCount;
    }
  • 最佳答案

    问题数量

    1. 主要问题是替换分隔符循环可能会将 \n 替换为 \0

    2. 次要:long fileSize 应为 size_t fileSize

    3. if (next != EOF){ 应删除。

    4. 次要:buffer = malloc(fileSize + 1); 应为 buffer = malloc(fileSize);

    5. 替换循环困惑

      size_t fileSize = ftell(current);
      ...
      buffer = malloc(fileSize); // later add error checking
      fread(buffer, fileSize, 1, current); // later add error checking
      /*replacing delimiter with null character*/
      for (size_t i = 0; i < fileSize; i++){
      if (buffer[i] == ',') {
      // Not sure why OP has (buffer[i+1] != ' ')? Maybe \n was originally meant
      if ((i+1) >= filesize) || ((buffer[i+1] != ' ') && (buffer[i+1] != '\n'))) {
      buffer[i] = '\0';
      // Or rather than the above if(), maybe something simple:
      buffer[i] = '\0';
      }
      }
      }

    代码未测试 - 抱歉时间不够。

    关于c - 从csv文件中读取错误的数字 '\n',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979784/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com