모두 좋은 하루.파일에서 데이터를 읽고 파일을 정리하고 저장하는 방법
아래에 일부 데이터가 포함 된 파일이 있습니다. 30 초 동안 3 초마다 기록을 포함합니다. 데이터에 대해 다음을 수행하려고합니다.
2010-03-03 16:00:31; 66.89; 24.0; 14.89; 0.08;
2010-03-03 16:00:35; 66.15; 24.1; 14.85; 0.08;
2010-03-03 16:00:38; 67.10; 24.2; 14.81; 0.08;
2010-03-03 16:00:42; 66.36; 24.3; 14.78; 0.08;
2010-03-03 16:00:46; 65.83; 24.4; 14.75; 0.09;
.
.
.
2010-03-03 17:00:31; 62.78; 25.2; 13.96; 0.12;
2010-03-03 17:00:35; 63.94; 25.3; 13.92; 0.11;
2010-03-03 17:00:39; 61.94; 25.3; 13.89; 0.11;
2010-03-03 17:00:43; 60.99; 25.4; 13.88; 0.12;
2010-03-03 17:00:46; 62.67; 25.4; 13.89; 0.13;
2010-03-03 17:00:50; 62.57; 25.3; 13.91; 0.13;
2010-03-03 17:00:54; 61.51; 25.3; 13.91; 0.14;
.
.
.
2010-03-03 18:00:29; 66.04; 20.7; 13.63; 0.56;
2010-03-03 18:00:33; 66.04; 20.7; 13.63; 0.56;
2010-03-03 18:00:37; 65.52; 20.7; 13.59; 0.56;
2010-03-03 18:00:40; 64.46; 20.7; 13.56; 0.56;
2010-03-03 18:00:44; 64.88; 20.8; 13.56; 0.56;
.
.
.
- 첫 번째 줄에서 시작하는 파일의 모든 라인을 읽어보십시오.
2. 두 번째 열의 데이터와이 합계를 발생시키는 레코드 수의 합계를 계산해야합니다.
3.And 다음 파일로 인쇄 다음 정보 : 이것은 전술 한 바와 같이 파일로 인쇄 할 작업의 예입니다
i.Date;sum(1st hour),number of records that gave rise to this sum;sum(2nd hour),num_records;sum(3rd hour),num_records;...; sum total(24 hours),totol_records;mean
;
03\03\2010; 15093.47; 379; 16025.46; 380; 14800.58; 379; 14605.34; 380; 21754.27,379;...;82279.12,1897;43,37
04\03\2010; 6842.051; 379; 7137.491; 380; 7215.16; 380; 7159.189; 379; 6594.672; 380;...;34948.56,1898;18,41
05\03\2010; 9938.37; 379; 9670.438; 380; 8232.032; 380; 9198.899; 379; 7083.687; 380;...;44123.426,1898;23,25
이 코드
int file_readline(char *file_in,char *outfile,char *strline) {
FILE *fd=NULL;
FILE *fo= NULL
char *date, *tmp,*time;
double sum=0;
double mean = 0;
strline=calloc(MAX_BUFFER_SIZE,sizeof(strline));
if (strline==NULL) {
printf ("Error calloc strline.................");
exit(EXIT_FAILURE);
}
file_in = calloc((strlen(strline)+strlen(file_in)),sizeof(file_in));
if (file_in==NULL)
{
printf ("Error calloc strline.................");
exit(EXIT_FAILURE);
}
fd=fopen(file_in,"r");
int i = 0;
int j = 0;
while ((fgets (strline, BUFSIZ, fd))>0 && !feof(fd)){
date = strtok(strline, " ");
time=strtok(NULL, " ");
tmp = strtok(NULL, ";");
if (i == 3) { // get only the 3rd value
sum += strtod(tmp, NULL);
++i;
// don't know how to proceed from here
C에서이 작업을 수행하려는 특별한 이유는 무엇입니까? perl과 같은 스크립트 언어는 그러한 작업에 더 적합 해 보입니다. –
왜 이런 직업에 C를 쓰겠습니까? 이러한 종류의 작업에 훨씬 더 적합한 대안 (예 : AWK, Perl)이 많이 있으며 더 간단 해집니다. 당신이 뭔가를 (당신이 질문에 언급하지 않은) 그 규칙을 필요로한다면, C++은 C# –
... 또는 C# .NET의 모든 기능을 유지하면서 조금 더 단순하게 만들 것입니다. Sebastian Lorion의 Fast CSV Reader : http://www.codeproject.com/KB/database/CsvReader.aspx –