bird.cpp

来自「提取 Mozilla Thunderbird 邮件格式数据」· C++ 代码 · 共 150 行

CPP
150
字号
// bird.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include <windows.h>

char Months[13][4]={
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
};


struct  TS{
	char week[4];
	char month[4];
	char day[3];
	char hms[9];
	char year[5];
};

TS ts;

int MonthToInt(char Mon[])
{
	for(int i=0;i<12;i++)
	{
		if(strncmp(Mon,Months[i],3)==0) return i+1;
	}
	return 0;
}

//From - Thu Nov 01 21:53:03 2007
//0123456789012345678901234567890
void ToStandTime(char *sTime)
{
	int st;
	for(st=0;st<3;st++) ts.week[st]=sTime[st+7]; ts.week[st]='\0';
	for(st=0;st<3;st++) ts.month[st]=sTime[st+11]; ts.month[st]='\0';
	for(st=0;st<2;st++) ts.day[st]=sTime[st+15]; ts.day[st]='\0';
	for(st=0;st<8;st++) ts.hms[st]=sTime[st+18]; ts.hms[st]='\0';
	for(st=0;st<4;st++) ts.year[st]=sTime[st+27]; ts.year[st]='\0';
	
}

void Usage()
{
	printf("Usage:  bird.exe OpenFile SavedFile start end\n");
	printf("Example:bird.exe Inbox tmp.log 20070101 20071212\n");
	
}

int main(int argc, char* argv[])
{
	//a.exe Inbox log.log stime etime;

	if(argc!=5){
		Usage();
		return 0;
	}
	char StandTime[10]="0";
	char *StartTime;
	char *EndTime;
	char *OpenFile;
	char *SavedFile;
	OpenFile = argv[1];
	SavedFile = argv[2];
	StartTime = argv[3];
	EndTime = argv[4];
	
	


	FILE *fp,*fw;
	if((fp = fopen(OpenFile,"r"))==NULL)
	{
		printf("File no exsit.");
		return 0;
	}
	if((fw = fopen(SavedFile,"w"))==NULL)
	{
		printf("Create file failed.");
		return 0;
	}

	char Mark[]="From - ";
	char SourceLine[200]="0";

	char *Marked; //From -
	int WriteIt =0; //是否写进文件
	int Count=0;


	HANDLE hConsole = GetStdHandle ( STD_OUTPUT_HANDLE );

	

	fgets(SourceLine,200,fp);
	Marked=strstr(SourceLine,Mark);

	while(!feof(fp))
	{
		
			if(Marked>0)
		{
			ToStandTime(SourceLine);
			sprintf(StandTime,"%s%d%s",ts.year,MonthToInt(ts.month),ts.day);
		
			if((!(strncmp(StartTime,StandTime,8)>0))&&(!(strncmp(EndTime,StandTime,8)<0)))
			{
				WriteIt = 1;
				Count ++;

				CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
				GetConsoleScreenBufferInfo(hConsole,&ConsoleScreenBufferInfo);
				COORD pos = {0, 0};
				ConsoleScreenBufferInfo.dwCursorPosition.X = 0;
				SetConsoleCursorPosition ( hConsole, ConsoleScreenBufferInfo.dwCursorPosition );
		//		SetConsoleCursorPosition ( hConsole, pos);
				printf("Getting... %d ", Count);
				fflush(stdout);
				Sleep(5);
			}
			else
				WriteIt = 0;

		}
			if(WriteIt) {fprintf(fw,"%s",SourceLine); fflush(fw);	}	
		fgets(SourceLine,200,fp);
		Marked=strstr(SourceLine,Mark);	
	
	}

	fcloseall();
	printf("\nok, total:%d",Count);

	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?