有一个csv数据表,第一列为编号,第二列为数据,编写C语言代码实现按照相同的编号,对第数据进行整理,相同编号的数据放在同一行,并将整理结果保存到新的csv文件
时间: 2024-11-18 15:16:16 浏览: 4
福岛第一核电站核废水数据集 CSV(1029条记录)【500010045】
5星 · 资源好评率100%
好的,我可以帮助你编写一个C语言程序来实现这个功能。以下是一个简单的示例代码,它读取一个CSV文件,将相同编号的数据整理到同一行,并将结果保存到一个新的CSV文件中。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1024
#define MAX_ID_LENGTH 50
#define MAX_DATA_LENGTH 50
typedef struct {
char id[MAX_ID_LENGTH];
char data[MAX_DATA_LENGTH][MAX_DATA_LENGTH];
int data_count;
} Record;
void add_data(Record *record, const char *data) {
if (record->data_count < MAX_DATA_LENGTH) {
strcpy(record->data[record->data_count++], data);
} else {
printf("Error: Too many data entries for ID %s\n", record->id);
}
}
int find_record(Record records[], int count, const char *id) {
for (int i = 0; i < count; i++) {
if (strcmp(records[i].id, id) == 0) {
return i;
}
}
return -1;
}
int main() {
FILE *inputFile = fopen("input.csv", "r");
FILE *outputFile = fopen("output.csv", "w");
if (!inputFile || !outputFile) {
perror("Error opening file");
return EXIT_FAILURE;
}
Record records[MAX_LINE_LENGTH];
int record_count = 0;
char line[MAX_LINE_LENGTH];
while (fgets(line, sizeof(line), inputFile)) {
char *id = strtok(line, ",");
char *data = strtok(NULL, "\n");
if (id && data) {
int index = find_record(records, record_count, id);
if (index == -1) {
strcpy(records[record_count].id, id);
records[record_count].data_count = 0;
add_data(&records[record_count], data);
record_count++;
} else {
add_data(&records[index], data);
}
}
}
for (int i = 0; i < record_count; i++) {
fprintf(outputFile, "%s", records[i].id);
for (int j = 0; j < records[i].data_count; j++) {
fprintf(outputFile, ",%s", records[i].data[j]);
}
fprintf(outputFile, "\n");
}
fclose(inputFile);
fclose(outputFile);
return EXIT_SUCCESS;
}
```
### 代码说明:
1. **结构体定义**:`Record`结构体用于存储每个编号及其对应的数据。
2. **函数`add_data`**:将数据添加到指定记录中。
3. **函数`find_record`**:在记录数组中查找指定编号的记录。
4. **主函数**:
- 打开输入和输出文件。
- 读取输入文件的每一行,解析出编号和数据。
- 如果找到对应编号的记录,则添加数据;否则创建新记录。
- 最后将所有记录写入输出文件。
### 使用方法:
1. 将你的CSV数据保存为`input.csv`。
2. 编译并运行上述代码。
3. 生成的整理后的数据将保存在`output.csv`中。
希望这能帮到你!如果你有任何问题或需要进一步的帮助,请告诉我。
阅读全文