2011-09-24 4 views
1
12 23 34 45 56 
34 23 56 21 43 
12 57 98 34 12 

위의 내용은 txt 파일의 내용입니다.파일에서 번호를 읽고 다른 번호로 바꾸십시오.

C를 사용하면 fgetc(myFile)을 사용하여 첫 번째 정수를 가져 와서 정수 변수에 저장할 수 있습니다.

나는 그것이 내가 정확히 특정 번호 교체하는 방법 (25)로 대체 할 12 인 경우가 12

을인지 여부를 확인합니다.

어떻게 특정 부분을 다시 작성합니까?

또는 모든 숫자를 배열에 저장하고 12 초를 다른 숫자로 바꾸고 전체 파일을 덮어 씁니까 ?? 정확히 당신이 원하는 덮어 쓰기하기 위해, 기록 된 데이터의 정확한 길이를 확인해야합니다

fgets 
ftell 
fseek 
fputs 

참고 :

+3

확인'fgetc' 참조에 결과를 기록, 그것은 당신에게 문자가 아닌 정수를 얻을 것이다. 또한 '숙제'를 태그로 추가하십시오. –

+0

글쎄, 제대로 완료 되었다면'fgetc'로 처리 할 수 ​​있지만, 여기에있는 경우는 의심 스럽다. – littleadv

+0

나는 그것이 문자라는 것을 알고있다. 하지만 정수를 사용하면, 그것은 작동합니다 .. 그래서 .. 나는 정수 부분으로 문자를 생략했습니다. – william

답변

0

결과의 이름을 변경하는 것보다 다른 파일에 결과를 저장하십시오. 이 코드는 homework.txt을 열고, 12 개의 대체 -> (25)와 homework_new.txt

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

#define MAXBUF 42 
#define HOMEWORKFILE "homework.txt" 
#define HOMEWORKNEWFILE "homework_new.txt" 

int main(int argc, char **argv) 
{ 
    char buf[MAXBUF+1]; 
    char str[MAXBUF+1]; 
    FILE *hw; 
    FILE *hw_new; 
    int length; 
    int i, j; 
    int number; 
    char is_first; 
    int n_line = 0; 

    hw = fopen(HOMEWORKFILE, "r"); 
    hw_new = fopen(HOMEWORKNEWFILE, "w"); 

    if (!hw) 
    { 
     fprintf(stderr, "File not found: %s\n", HOMEWORKFILE); 
     return 5; 
    } 

    while(!feof(hw)) 
     if (fgets(buf, MAXBUF, hw) != NULL) 
     { 
      length = strlen(buf); 
      j = 0; 
      str[0] = 0; 
      is_first = 1; 
      n_line++; 
      /* parse string */ 
      for(i = 0; i < strlen(buf); ++i) 
      { 
       if (isblank(buf[i]) || buf[i] == '\0' || buf[i] == '\n') 
       { 
        str[j] = 0; 
        number = atoi(str); 

        if (is_first) 
         is_first = 0; 
        else 
         fprintf(hw_new, " "); 

        if (number == 12) 
         fprintf(hw_new, "%d", 25); 
        else 
         fprintf(hw_new, "%d", number); 

        j = 0; 
       } 
       else if (isdigit(buf[i])) 
       { 
        str[j++] = buf[i]; 
       } 
       else 
       { 
        fprintf(stderr, "bad input on line %d '%s'\n", n_line, buf); 
        return 100; 
       } 
      } 
      fprintf(hw_new, "\n"); 

     } 

    fclose(hw_new); 
    fclose(hw); 
    return 0; 
} 
0

여기 목록입니다. 당신이 말한대로

또 다른 옵션은 작은 파일의 경우, 당신은 또한 전체 파일이 좋은 아이디어와 쉽게 덮어 쓰기,

freopen 
1

필요, 전체 파일을 덮어 쓰기, 할 것이다.

c 언어로 제한되지 않는 경우 "sed"또는 일부 스크립트 언어와 같은 강력한 도구를 사용해 볼 수 있습니다.

+0

강력한 도구 용 +1 – pmg

관련 문제