我想知道一种按行排序文本文件的简单方法。 我有2个文件:
文件1:
asazxz
dsa dsasd
dsds tut
pewoq
file2的:
uiosda dsds
poisss
我目前的代码是:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[]){
int nrf1=0;
int nrf2=0;
FILE *f1=NULL;
FILE *f2=NULL;
FILE *fe=NULL;
f1=fopen(argv[1],"r");
f2=fopen(argv[2],"r");
fe=fopen(argv[3],"w");
if (f1==NULL || f2==NULL || fe==NULL){
printf("couldn't open a file \n");
return 1;
}
char p;
while (1){
p=fgetc(f1);
if(p==EOF) break;
nrf1++;
}
while(1){
p=fgetc(f2);
if(p==EOF) break;
nrf2++;
}
rewind(f1);
rewind(f2);
while ( (p = fgetc(f1))!= EOF )
fputc(p,fe);
while ( (p = fgetc(f2))!= EOF )
fputc(p,fe);
//if(nrf1>nrf2){
//printf("%s %d \n",argv[1],\nrf1);
//while( (p=fgetc(f1))!=EOF )
//
//}
//else{
//printf("%s %d \n",argv[2],nrf2);
//while( (p=fgetc(f2))!=EOF )
//
//}
rewind(fe);
fclose(f1);
fclose(f2);
fclose(fe);
return 0;
}
我在文件3中合并了file1和file2
我对如何按行排序文件3有一些想法,但我真的不知道如何让它们发生。
一个是经过两个较长的文本,找到一个\ n和所有文本,直到\ n被放入一个数组并对数组进行排序,然后将排序数组的每个元素放在一个line form file3。
另一个是通过file3尝试以某种方式按字母顺序切换行,就像bubblesort一样。
编辑:设法做到了,只需要一些方向,谢谢大家
答案 0 :(得分:2)
作为口头程序,你可以这样做:
分配一系列指向字符的指针
阅读文件的所有行。为每一行分配一个新字符串并放入数组
如果数组太小,请使用realloc
使其变大。阅读qsort
以避免常见错误。
读取文件后,使用您自己的冒泡排序或库qsort
对数组进行排序。阅读file3
。
排序后,从阵列中重写Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Denis\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:\Users\Denis\Desktop\Python\Sunday Work.py", line 47, in <lambda>
RegistrationButton = Button(userRegister,text="Register",font=("monaco", 10),width=30,relief="groove",command=lambda: accountRegister(RegistrationUsernameEntry.get(),RegistrationPasswordEntry.get())).place(x=26,y=230)
AttributeError: 'NoneType' object has no attribute 'get'
。
编码这是一个很好的练习,我留给你。
答案 1 :(得分:1)
如果您真的想在C中执行此操作,您可能需要使用getline (3)
函数读取整个文件,并将结果放在链接列表中,以防您不知道该行的行数文件。
完成后,您只需将strcmp (3)
与您选择的排序算法(冒泡排序,插入排序等)一起使用。
然后,您就可以重新打开文件进行编写并插入已排序的链接列表。
修改强>:
正如@alk的评论中所提到的,我认为如果您不知道文件的大小,您的程序最好使用链接列表而不是常规数组。
<强>临强>:
您不知道文件的大小,使用数组会强制您使用realloc (3)
,因为realloc函数实际上创建了一个新指针,复制了指向的日期的全部内容,这会随着时间的推移而耗费资源。你的旧指针,并释放旧指针。如果文件相对较短,那应该不是问题,但是当你开始拥有大文件时,它可能是一个关于性能的问题。
<强> N 强>: 链接列表有效地使您的工作复杂化。解决这个问题的方法是创建你自己的一般喜欢列表库,并在你需要的项目中使用它,这样你只需要做一次。