我是 C 编程的新手。现在我正在用 C 编写一个程序,它读取.txt文件并将数据存储到另一个txt文件中。例如:
打开20150101.txt
然后获取
中的数据2015010103I
2015010102O
然后将其存储在2015JAN.txt
目前我在排序.txt文件的内容方面遇到了问题。你能帮帮我吗?
int intCtr;
int intCtr2;
int intCtr3;
char strTempData[MAX_SIZE];
FILE * ptrFileLog;
ptrFileLog = fopen(strFileName, "r");
while(fgets(strTRLog, MAX_SIZE, ptrFileLog) != NULL) {
FILE * ptrSummary;
ptrSummary = fopen(strFileSummary, "a");
for(intCtr = 0; intCtr < MAX_SIZE; intCtr++) {
strcpy(strTempCopy[intCtr], strTRLog);
}
for(int intCtr = 0; intCtr < MAX_SIZE; intCtr++) {
for(int intCtr2 = 6; intCtr2 < 7; intCtr2++) {
if(strcmp(strTempCopy[intCtr -1], strTempCopy[intCtr]) > 0) {
strcpy(strTempData, strTempCopy[intCtr]);
strcpy( strTempCopy[intCtr], strTempCopy[intCtr - 1]);
strcpy(strTempCopy[intCtr -1], strTempData);
}
}
}
for(int intCtr = 0; intCtr < 1; intCtr++) {
fputs(strTempCopy[intCtr], ptrSummary);
}
}
fclose(ptrFileLog);
fclose(ptrSummary);
答案 0 :(得分:4)
要解决此问题,我建议逐行阅读并将其存储在字符串列表中。并使用任何排序算法对列表进行排序(例如:冒泡排序)。并将结果打印在新文件中。 不打开文件里面循环不是一个好主意。在一些混乱的情况下,你可能最终将处理程序丢失到打开的文件中。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 100 // Length of each line in input file.
int main(void)
{
char *strFileName = "C:\\Users\\sridhar\\untitled4\\data.txt";
char *strFileSummary = "C:\\Users\\sridhar\\untitled4\\out.txt";
char strTempData[MAX_LEN];
char **strData = NULL; // String List
int i, j;
int noOfLines = 0;
FILE * ptrFileLog = NULL;
FILE * ptrSummary = NULL;
if ( (ptrFileLog = fopen(strFileName, "r")) == NULL ) {
fprintf(stderr,"Error: Could not open %s\n",strFileName);
return 1;
}
if ( (ptrSummary = fopen(strFileSummary, "a")) == NULL ) {
fprintf(stderr,"Error: Could not open %s\n",strFileSummary);
return 1;
}
// Read and store in a string list.
while(fgets(strTempData, MAX_LEN, ptrFileLog) != NULL) {
// Remove the trailing newline character
if(strchr(strTempData,'\n'))
strTempData[strlen(strTempData)-1] = '\0';
strData = (char**)realloc(strData, sizeof(char**)*(noOfLines+1));
strData[noOfLines] = (char*)calloc(MAX_LEN,sizeof(char));
strcpy(strData[noOfLines], strTempData);
noOfLines++;
}
// Sort the array.
for(i= 0; i < (noOfLines - 1); ++i) {
for(j = 0; j < ( noOfLines - i - 1); ++j) {
if(strcmp(strData[j], strData[j+1]) > 0) {
strcpy(strTempData, strData[j]);
strcpy(strData[j], strData[j+1]);
strcpy(strData[j+1], strTempData);
}
}
}
// Write it to outfile. file.
for(i = 0; i < noOfLines; i++)
fprintf(ptrSummary,"%s\n",strData[i]);
// free each string
for(i = 0; i < noOfLines; i++)
free(strData[i]);
// free string list.
free(strData);
fclose(ptrFileLog);
fclose(ptrSummary);
return 0;
}
答案 1 :(得分:0)
首先,您应该重新检查代码流。例如,您多次打开strFileSummary
(在while
循环内)并在结束时仅关闭一次。使用一些for
循环至少是有趣的。
另外,我还不清楚你究竟要在那里实现什么样的排序算法。
我的建议不是重新发明轮子并使用stdlib的qsort
功能。
您只需要编写比较函数。请在此处查看示例:Using stdlib's qsort() to sort an array of strings