文件读写解析随写

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

//#define LAST_I_INDEX "last_i_index="
typedef unsigned long dword;

typedef struct{
int last_i_index;
int last_r_index;
int current_i_index;
int current_r_index;
int is_i_full;
int is_r_full;
}log_record_t;
void read_from_seq(log_record_t *log_record)
{
FILE *fd_read;
char line[81];
char *p;
if(NULL == log_record) return;
fd_read = fopen("c:\\CBYPRB.SEQ","r");
if(fd_read)
{
while(NULL != fgets(line,80,fd_read))
{
if(p = strstr(line,"last_i_index="))
log_record->last_i_index = atoi(p+strlen("last_i_index="));
if(p = strstr(line,"last_r_index="))
log_record->last_r_index = atoi(p+strlen("last_r_index="));
if(p = strstr(line,"current_i_index="))
log_record->current_i_index = atoi(p+strlen("current_i_index="));
if(p = strstr(line,"current_r_index="))
log_record->current_r_index = atoi(p+strlen("current_r_index="));
if(p = strstr(line,"is_i_full="))
log_record->is_i_full = atoi(p+strlen("is_i_full=")) >1 ? 0 : atoi(p+strlen("is_i_full="));
if(p = strstr(line,"is_r_full="))
log_record->is_r_full = atoi(p+strlen("is_r_full="))>1 ? 0 : atoi(p+strlen("is_r_full="));

}
fclose(fd_read);
}

}
void read_from_log_head(int log_index)
{
FILE *fd_read;
char line[81];
char logname[20];
char *p;
char start_time[20];
char end_time[20];
int count = 0;
bool x = false;
bool y = false;
int res = 1;


sprintf(logname,"c:\\test%d.log",log_index);
fd_read = fopen(logname,"r");
if(fd_read = fopen(logname,"r"))
{
while(NULL != fgets(line,80,fd_read) && count <3)
{
if(p = strstr(line,"the start date and time : "))
{
x=true;
strncpy(start_time,p+strlen("the start date and time : "),19);
start_time[19]='\0';
}
if(p = strstr(line,"the end date and time : "))
{
y= true;
strncpy(end_time,p+strlen("the end date and time : "),19);
end_time[19]='\0';
}

count++;
}
fseek(fd_read,0l,SEEK_SET);
if(x && y)
{
if(!(strcmp("2001-01-01 12:12:12",end_time)>0 || strcmp(start_time,"2013-01-01 12:12:12")>0 ))
{

printf("-------------------%s---------------------\r\n",logname);
while(NULL != fgets(line,80,fd_read)) printf( "%s",line);
}


res = 0;
}
fclose(fd_read);
}

}
void printout_log_r(log_record_t *log_record)
{
int start_index = 0;
int i;
int r;
int log_index;
int end_index;
if(NULL == log_record) return;
printf("--------------------------R--------------------------\r\n");
if(log_record->is_r_full)
start_index = (log_record->current_r_index == log_record->last_r_index)
? 0 : log_record->current_r_index+1;

for(i = start_index;i < log_record->last_r_index + start_index;i++)
{
if(i > log_record->last_r_index) log_index = i - log_record->last_r_index;
else log_index = i;

read_from_log_head(log_index);
}


}
void printout_log_i(log_record_t *log_record)
{
int start_index = 0;
int i;
int r;
int log_index;
int end_index;
if(NULL == log_record) return;
printf("--------------------------I--------------------------\r\n");
start_index = log_record->last_r_index + 1;

if(log_record->is_i_full)
start_index = (log_record->current_i_index == log_record->last_i_index)
? log_record->last_r_index + 1
: log_record->current_i_index+1;
end_index = log_record->last_i_index + start_index - log_record->last_r_index;
for(i = start_index;i < end_index;i++)
{
if(i > log_record->last_i_index) log_index = i-(end_index-start_index);
else log_index = i;

read_from_log_head(log_index);
}
}
int main(int argc, char *argv[])
{

log_record_t log_record;
int cmd = 2;

read_from_seq(&log_record);
switch (cmd)
{
default:
case 0:
printout_log_r(&log_record);
break;
case 1:
printout_log_i(&log_record);
break;
case 2:
printout_log_r(&log_record);
printout_log_i(&log_record);
break;
}
system("PAUSE");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值