| 고급 프로그래밍 및 실험 10주차 레포트 - 에러난 버젼 |
Tech - https://ohyung.net/380 (YMD: 07/05/07 19:31)
기본적인 알고리즘 ( 찾기 수정제외 ) 을 보길 바랍니다.
이거 레폿용 SAMPLE.TXT 잘돌아갑니다...
하지만 파일이 커질경우 한 30k 정도 이상일 경우 결과 파일의 뒷부분에 쓰레기 값이 추가 됩니다....
그래서 버렸습니다.
조교님도 가지고 있는 소스니 그냥 내면 바로 감점 처리 될겁니다.
저는 바꿔서 제출하였기때문에;;; 이번엔 괜찮겠죠 ;;;;

네이년에 보면 누군가가 질문올렸더군요.. ( 검색어 : 두목의 은혜 )
그걸로 해결 하였습니다. -.-;

log.txt 파일 작성방법은 대충 아 이렇구나 하심 될겁니다.

그럼 건승을 기원하면서 내일 예비군 훈련장에서 보아요;;;;;;;

Code Type : c
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include< stdio.h>
#include< stdlib.h>
#include< string.h>
#include<time.h>
 
void logman(char *ori_file,char *ori_word, int wordcnt)
{
    FILE *log_fp;
    int s_month,s_day,s_min,s_hour;
 
    time_t today;
    struct tm *t;
 
    today = time(NULL);
    t = localtime(&today);
 
    s_month=t->tm_mon+1;
    s_day=t->tm_mday;
    s_min=t->tm_min;
   s_hour=t->tm_hour;
 
    log_fp = fopen("log.txt", "a+");
    if(log_fp == NULL)
    {
        printf("\nlog.txt화일이 손상되었습니다. 종료합니다.");
        exit(0);
    }
 
    fprintf(log_fp,"| %02d/%02d | %02d:%02d | %-20s | %-20s | %-10d\n",s_month,s_day,s_hour,s_min,ori_file,ori_word,wordcnt);
    //printf("| %2d/%2d | %2d:%2d | %-20s | %-20s | %-10d\n",s_month,s_day,s_hour,s_min,ori_file,ori_word,wordcnt);
    fclose(log_fp);
 
}
 
int main()
{
    FILE *ori_fp, *ch_fp, *mod_fp, *log_fp,*ch_fp2;
    int wordcnt=0,ch_len;
    long int maxfile2=0,maxfile=0;
    char *readtemp,*findpoint, *chpoint, *modpoint;
    char ori_file[50],ori_word[50],ch_word[50], yorn;
 
    log_fp = fopen("log.txt", "r");
    if(log_fp == NULL)
    {
        log_fp = fopen("log.txt", "w+");
        fprintf(log_fp,"------------------------------------------------------------------------------\n");
        fprintf(log_fp,"\"Find and Replace\" Program statistics.\nThis file is generated during first program session. new session will be appended\n");
        fprintf(log_fp,"------------------------------------------------------------------------------\n");
        fprintf(log_fp,"|  Date |  Time | FileName         | FindWhat         | # SearchNum \n");
        fprintf(log_fp,"------------------------------------------------------------------------------\n");
        fclose(log_fp);
    }
    fclose(log_fp);
 
    printf("------------------------------------------------------------------------------\n");
    printf("\t\t\t\tFind and Replace\n");
    printf("------------------------------------------------------------------------------\n");
    printf("::: File Name : ");
    gets(ori_file);
    printf("------------------------------------------------------------------------------\n");
     
    ori_fp = fopen(ori_file, "r");
    if(ori_fp == NULL)
    {
        printf("\"%s\" FILE open ERROR\n입력하신 파일이 존재하지 않습니다.\n",ori_file);
        exit(0);
    }
 
    ch_fp = fopen("result.txt", "w+");
    if(ch_fp == NULL)
    {
        printf("\"Result.txt\" can't not open!\nResult.txt화일을 생성할 수 없습니다. \n");
        exit(0);
    }
     
    //크기 계산, 멀록으로 임시로 잡고 마지막 마무리 해주고 모두 임시와 동일하게
    fseek(ori_fp, 0, SEEK_END);
    maxfile = ftell(ori_fp);
    fseek(ori_fp, 0, SEEK_SET);
    maxfile2 = ftell(ori_fp);
 
    if(maxfile>32768)
        printf("파일이 너무큽니다.버그가 존재 할 가능성이 있습니다.\n");
 
 
    readtemp = (char *)malloc(maxfile+1);
    memset(readtemp,0x00,maxfile+1);
     
    fread(readtemp, maxfile, 1, ori_fp);
    readtemp[maxfile] = 0x00;
     
    //memcpy(buf2,readtemp,maxfile+1);
 
    findpoint = chpoint = readtemp;
     
    while(1)
    {
        // 수정할것 입력받기부분
        printf("\n>> Find what : ");
        gets(ori_word);
 
        // 찾기
        for (wordcnt=0;strstr(findpoint, ori_word);wordcnt++)
        {
            findpoint = strstr(findpoint, ori_word);
            findpoint += strlen(ori_word);
        }
        findpoint = chpoint = readtemp;
 
        if(!wordcnt)
        {
            printf("\"%s\" 찾는 내용이 없습니다.\n",ori_word);
            logman(ori_file,ori_word,wordcnt);
        }
        else
        {
            printf("* \"%s\" 총 %d 건이 검색되었습니다.\n>> Quick Replace (y or n) : ",ori_word,wordcnt);
            scanf("%c",&yorn);
            fflush(stdin);
            if(yorn=='y')
            {
                //바꿀거
                while(strlen(ori_word)!=strlen(ch_word))
                {
                    printf("\n>> Replace with : ");
                    gets(ch_word);
                    if(strlen(ori_word)!=strlen(ch_word))
                        printf("찾는찾는 문자열과 바뀔 문자열의 글자수는 반드시 통일 하세요.\n");
                     
                }
                ch_len=strlen(ch_word);
                 
                //찾고 바꾸고 반복
                for (wordcnt=0;strstr(findpoint, ori_word);wordcnt++)
                {
                    chpoint = strstr(findpoint, ori_word);
                    fwrite(findpoint, chpoint-findpoint, 1, ch_fp); // 발견전까지 쓰기
                    fwrite(ch_word, ch_len, 1, ch_fp); // 수정 쓰기
                    chpoint += ch_len; // 수정만큼늘리고
                    findpoint = chpoint; //findpoint를 맞추고
                }
                //나머지 부분
                //fwrite(findpoint, maxfile-(strlen(readtemp)-strlen(chpoint)), 1, ch_fp);
                //fwrite(findpoint, strlen(findpoint), 1, ch_fp);
                 
                logman(ori_file,ori_word,wordcnt);
                printf("* \"%s\" -> \"%s\" 총 %d 건을 수정하였습니다.\n",ori_word,ch_word,wordcnt);
                break;
            }
        }
     
    }
    fclose(ch_fp);
    fclose(ori_fp);
    free(readtemp);
 
    // 원본과 다른 부분 잘라내기
    ori_fp = fopen("result.txt", "r");
    if(ori_fp == NULL)
    {
        printf("\"Result.txt\" can't not open!\nResult.txt화일을 생성할 수 없습니다. \n");
        exit(0);
    }
    ch_fp = fopen("result2.txt", "w+");
    if(ch_fp == NULL)
    {
        printf("\"Result.txt\" can't not open!\nResult.txt화일을 생성할 수 없습니다. \n");
        exit(0);
    }
     
    readtemp = (char *)malloc(maxfile);
    memset(readtemp,0,maxfile);
 
    fread(readtemp, maxfile, 1, ori_fp);
    fwrite(readtemp, maxfile, 1, ch_fp); // 발견전까지 쓰기
                     
    fclose(ch_fp);
    fclose(ori_fp);
 
    free(readtemp);
    return 0;
}</time.h>
| 이 포스트에 대한 이용규약 |
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 라이센스 에 따라 이용하실 수 있습니다.
This work is licensed under a Creative Commons Attribution 2.0 Korea LicenseLink in a new window.

| 이 글과 태그로 연관된 글 |

| 트랙백 |
트랙백 주소 :: https://www.ohyung.net/rserver.php?mode=tb&sl=380