linux平台上用C读取csv文件

本文介绍在Linux环境下使用C语言读取CSV文件的一种方法,特别针对NULL项目和连续逗号的问题进行了解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux平台上用C读取csv文件一种方法, 但是对NULL项目无效,比如两个连续逗号的项目

 

fscanf和scanf的格式里面,可以用%[^...]来指定读取除括号以外的文字。

 

比如有如下csv文件

test01,10,11,1.0,1.1
test02,20,21,2.0,2.1
test03,30,31,3.0,3.1

 

 那么读取CSV文件的代码如下

#include <stdio.h>

int main(void)
{
  FILE *fp;
  char *fname = "comma.csv";
  char s[100];
  int ret, n1, n2;
  float f1, f2;

  fp = fopen( fname, "r" );
  if( fp == NULL ){
    return -1;
  }

  while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
    printf( "%s %d %d %f %f", s, n1, n2, f1, f2 );
  }

  fclose( fp );
  return 0;
}

 

Linux 系统中,读取 CSV 文件的方法可以依赖于不同的工具和语言,例如 shell 脚本、C 语言或 Python。以下是一些常见的方法和命令。 ### 使用 Shell 脚本读取 CSV 文件 可以通过 `while` 循环和 `read` 命令逐行读取 CSV 文件,并利用逗号作为字段分隔符来提取数据。在读取前,建议先清理文件中的多余字符(如换行符 `\r`),使用 `tr` 命令处理: ```bash tr -d '\r' < ip.csv > ip_pure.csv ``` 然后,使用 shell 脚本读取文件到数组变量中: ```bash #!/bin/bash file="ip_pure.csv" default_db="postgres" port=8000 function get_ip() { # 检查CSV文件是否存在 if [ ! -f "$file" ]; then echo "CSV file doesn't exist" exit fi # 读取CSV文件到数组变量中 i=0 ipnum=0 while IFS=, read -r ip_tmp user_tmp pwd_tmp; do dbip[$i]=$ip_tmp dbuser[$i]=$user_tmp dbpwd[$i]=$pwd_tmp i=$(expr $i + 1) ipnum=$i done < "$file" # 使用数组变量中的值 for ((i=0; i < $ipnum; ++i)); do host_ip=${dbip[$i]} dba_user=${dbuser[$i]} dba_pw=${dbpwd[$i]} # 连接串变量 gsql_connect="gsql -h $host_ip -d $default_db -p $port -U $dba_user -W $dba_pw -c" # 你可以接着做其他操作,例如执行连接 echo "$gsql_connect" done } get_ip ``` ### 使用 C 语言读取 CSV 文件 在 C 语言中,可以使用 `fgets` 读取每一行,并用 `strtok` 函数按逗号分隔字段。以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fp = fopen("ip.csv", "r"); char line[1024]; if (fp == NULL) { perror("Error opening file"); return EXIT_FAILURE; } while (fgets(line, sizeof(line), fp)) { char *token = strtok(line, ","); while (token) { printf("Field: %s\n", token); token = strtok(NULL, ","); } } fclose(fp); return 0; } ``` ### 使用 Python 读取 CSV 文件 Python 提供了内置的 `csv` 模块,可以方便地读取和处理 CSV 文件。以下是一个简单的示例: ```python import csv with open('ip.csv', newline='') as csvfile: reader = csv.reader(csvfile, delimiter=',') for row in reader: print('Row:', row) ``` 这种方法适用于处理结构化的 CSV 数据,并且可以轻松地进行数据操作和分析。 ### 使用命令行工具读取 CSV 文件 - **`cat` 命令**:直接查看 CSV 文件内容。 ```bash cat ip.csv ``` - **`awk` 命令**:可以按列提取数据。 ```bash awk -F, '{print $1}' ip.csv # 打印第一列 ``` - **`cut` 命令**:提取特定字段。 ```bash cut -d, -f1 ip.csv # 提取第一列 ``` 这些方法和命令可以根据具体需求选择使用,能够满足从简单的数据读取到复杂的数据处理任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值