c语言根据文本内每行数据的某个特定数据从小到大往下排列所有数据,再替换掉原来文本内容存储中,文本每一行内容格式为”%s %s %s %c %s %f %f %f %f %f %f %f %d“,其中根据最后%d整形数据从小到大排列
时间: 2023-09-09 21:08:02 浏览: 42
可以通过定义一个结构体来存储每行数据,然后根据最后一个整数进行排序,最后将排序后的数据写回到原文件中。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 1000
typedef struct {
char str1[20];
char str2[20];
char str3[20];
char c;
char str4[20];
float f1;
float f2;
float f3;
float f4;
float f5;
float f6;
float f7;
int num;
} Data;
int cmp(const void *a, const void *b) {
Data *da = (Data *)a;
Data *db = (Data *)b;
return da->num - db->num;
}
int main() {
FILE *fp;
char line[MAX_LINE_LENGTH];
Data data[1000];
int count = 0;
// 打开文件
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("Failed to open file.\n");
return 1;
}
// 读取文件内容
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
sscanf(line, "%s %s %s %c %s %f %f %f %f %f %f %f %d",
data[count].str1, data[count].str2, data[count].str3, &data[count].c,
data[count].str4, &data[count].f1, &data[count].f2, &data[count].f3, &data[count].f4,
&data[count].f5, &data[count].f6, &data[count].f7, &data[count].num);
count++;
}
// 对数据进行排序
qsort(data, count, sizeof(Data), cmp);
// 将排序后的数据写回到文件
freopen("data.txt", "w", fp);
for (int i = 0; i < count; i++) {
fprintf(fp, "%s %s %s %c %s %f %f %f %f %f %f %f %d\n",
data[i].str1, data[i].str2, data[i].str3, data[i].c,
data[i].str4, data[i].f1, data[i].f2, data[i].f3, data[i].f4,
data[i].f5, data[i].f6, data[i].f7, data[i].num);
}
// 关闭文件
fclose(fp);
return 0;
}
```
需要注意的是,该程序假设每行数据格式一致,如果实际数据格式有所不同,需要根据实际情况进行修改。同时,也需要保证最后一个整数的位置和类型正确,否则程序可能会出错。