c语言根据文本内每行数据的某个特定数据从小到大往下排列所有数据再存储在文本中代码不用命令行
时间: 2024-02-12 07:04:20 浏览: 65
用C语言实现从文本文件中读取数据后进行排序的功能
好的,根据您的要求,下面是一个示例代码,实现了根据文本内每行数据的某个特定数据从小到大往下排列所有数据再存储在文本中,不需要命令行输入文件路径和输出文件路径,程序中已经预设了输入文件和输出文件的路径。
```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() {
FILE *input_file = fopen("input.txt", "r");
if (input_file == NULL) {
printf("Open input file failed!\n");
return 0;
}
FILE *output_file = fopen("output.txt", "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;
}
```
在这个示例代码中,程序会自动读取当前目录下的“input.txt”文件作为输入文件,将排序后的结果写入“output.txt”文件中。如果您需要更改输入文件和输出文件的路径,只需要修改代码中文件路径的字符串即可。
阅读全文