c语言根据文本内每行数据的某个特定数据从小到大往下排列所有数据再存储在文本中代码
时间: 2024-02-12 10:04:19 浏览: 67
好的,根据您的问题,您想要实现一个根据文本内每行数据的某个特定数据从小到大往下排列所有数据再存储在文本中的功能。下面是一个示例代码,供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1000 // 最大行长度
#define MAX_COL_NUM 10 // 最大列数
// 数据结构定义
typedef struct {
int key; // 特定数据
char cols[MAX_COL_NUM][MAX_LINE_LEN]; // 其他列数据
} LineData;
// 比较函数
int compare(const void *a, const void *b) {
const LineData *la = (const LineData *)a;
const LineData *lb = (const LineData *)b;
return la->key - lb->key;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
printf("Usage: %s <input_file> <output_file>\n", argv[0]);
return 0;
}
FILE *input_file = fopen(argv[1], "r");
if (input_file == NULL) {
printf("Open input file failed!\n");
return 0;
}
FILE *output_file = fopen(argv[2], "w");
if (output_file == NULL) {
printf("Open output file failed!\n");
fclose(input_file);
return 0;
}
int line_num = 0;
LineData *line_datas = (LineData *)malloc(sizeof(LineData));
char line[MAX_LINE_LEN];
while (fgets(line, MAX_LINE_LEN, input_file) != NULL) {
// 解析行数据
char *p = strtok(line, ",");
line_datas[line_num].key = atoi(p);
int col_num = 0;
while ((p = strtok(NULL, ",")) != NULL) {
strcpy(line_datas[line_num].cols[col_num], p);
col_num++;
}
line_num++;
line_datas = (LineData *)realloc(line_datas, sizeof(LineData) * (line_num + 1));
}
// 排序
qsort(line_datas, line_num, sizeof(LineData), compare);
// 输出到文件
for (int i = 0; i < line_num; i++) {
fprintf(output_file, "%d,", line_datas[i].key);
for (int j = 0; j < MAX_COL_NUM; j++) {
if (line_datas[i].cols[j][0] != '\0') {
fprintf(output_file, "%s", line_datas[i].cols[j]);
}
if (j < MAX_COL_NUM - 1) {
fprintf(output_file, ",");
}
}
fprintf(output_file, "\n");
}
// 释放资源
free(line_datas);
fclose(input_file);
fclose(output_file);
return 0;
}
```
您需要在命令行中传入两个参数,第一个参数是输入文件的路径,第二个参数是输出文件的路径。输入文件中每行数据包含若干列,以逗号分隔,第一列为特定数据。程序会读取输入文件中的所有数据,按照特定数据从小到大排序,然后将排序后的结果写入输出文件中。
阅读全文