1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#include <stdbool.h>
#include <string.h>
#define INPUT_FILE "input.lrc"
#define OUTPUT_FILE "output.srt"
char* formatTimeStamp(int min,int sec,int millisec){
static char srt_time[20];
int hours = min / 60;
min %= 60;
sprintf(srt_time, "%02d:%02d:%02d,%03d", hours, min, sec, millisec*10);
return srt_time;
}
int extractTimeStamp(const char * buffer,char *timeStamp,char *OriText){
if(sscanf(buffer,"[%9[^]]]%[^/n]",timeStamp,OriText)==2){
return 1;
}else
if(sscanf(buffer,"[%9[^]]]%[^/n]",timeStamp,OriText)==1){
return 1;
}else{
return 0;
}
}
bool BreakUpTimeStamp(const char * timeStamp,int * mins,int* sec,int* millisec){
if(sscanf(timeStamp,"%2d:%2d.%2d",mins,sec,millisec)==3){
return 1;
}else return 0;
}
int main(){
FILE* inputFile=fopen(INPUT_FILE,"r");
FILE* outputFile=fopen(OUTPUT_FILE,"w");
char buffer[256];
int index =1;
int prev_mins=0,prev_sec=0,prev_millisec=0;
int mins=0,sec=0,millisec=0;
char timeStamp[10],OriText[200],prev_text[200];
char startTime[20];
char endTime[20];
bool firstFlag=1;
if(inputFile==NULL) {
printf("can not open input file\n");
return 1;
}
if(outputFile==NULL){
printf("can not open output file\n");
return 1;
}
setlocale(LC_ALL,"en_US.UTF-8");
while(fgets(buffer,sizeof(buffer),inputFile)){
if(extractTimeStamp(buffer,timeStamp,OriText)){
if(BreakUpTimeStamp(timeStamp,&mins,&sec,&millisec)){
if(firstFlag){
prev_mins=mins;
prev_sec=sec;
prev_millisec=millisec;
strcpy(prev_text,OriText);
firstFlag=0;
printf("%d,%d,%d\n",prev_mins,prev_sec,prev_millisec );
}else{
fprintf(outputFile, "%d\n",index);
strcpy(startTime, formatTimeStamp(prev_mins, prev_sec, prev_millisec));
strcpy(endTime, formatTimeStamp(mins, sec, millisec));
printf("prev:%d,%d,%d\n",prev_mins,prev_sec,prev_millisec );
printf("curr:%d,%d,%d\n",mins,sec,millisec);
printf("\n");
fprintf(outputFile, "%s --> %s\n",startTime,endTime);
fprintf(outputFile, "%s\n",prev_text);
prev_mins = mins;
prev_sec = sec;
prev_millisec = millisec;
strcpy(prev_text,OriText);
index++;
}
}else{
printf("cannot BreakDown TimeStamp\n");
}
}else{
printf("cannot extract TimeStamp\n");
}
}
fclose(inputFile);
fclose(outputFile);
return 0;
}
|