2013-04-23 2 views
1

텍스트 파일을 C의 이진 파일로 변환하는 데 도움이 필요합니다. 값이 인쇄되고 있는지 알지 못하기 때문에 프로그램을 절반 작성했지만 계속 진행할 수 없습니다. . 변환에는 사람, 동물에 대한 최대, 너비, 길이 및 문자열이 필요합니다. 기본적으로 필자가 작성한 프로그램은 바이너리 데이터베이스 파일을 읽고 검색을 만족시키는 모든 값을 반환합니다. 도움텍스트를 이진 데이터베이스

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

typedef struct{ 
int max; 
double length, width; 
char people; 
} max_t; 

int 
main() 
{ 
FILE *database; 
int inp, out; 

     database = fopen("database.txt", "r"); 
    fscanf(database, "Max : %d", &max); 
    fscanf(database, "Width : %lf", &width); 
    fscanf(database, "Length : %lf", &length); 
    fscanf(database, "People : %s", &people); 
    fwrite(&max, 1, sizeof(max), database); 
    fwrite(&width, 1, sizeof(width), database); 
    fwrite(&length, 1, sizeof(length), database); 
    fwrite(&people, 1, sizeof(people), database); 
     database = fopen("out.txt", "wb"); 

return(0); 
} 
+3

환영을보고, 유용한 응답을 얻을 수 있도록 적절한 질문을하는 방법을 먼저 배우십시오. http://stackoverflow.com/questions/how-to-ask 귀하는 누군가를 도와 줄 수있는 코드 나 가치있는 것을 보여주지 않습니다. – OldProgrammer

+0

환영합니다. 내 책이 너무 애매하기 때문에 변환 코드가 없습니다. 내가 stackoverflow 및 기타 웹 사이트 내에서 높은 및 낮은 검색되었습니다 사용의 아무것도 나타나지 않았다. 그것은 텍스트를 가져 와서 해당 하위 필드와 함께 바이너리를 반환하는 단순한 I/O 인 것처럼 보이지만 그 주위에 내 머리를 감쌀 수는 없습니다. – Hamas4

+1

갖고 계신 것을 보여주고 거기에서 가져 가십시오. –

답변

0

당신은 어리석은 실수를 저지르고 있습니다. 출력 파일에 아무것도 쓰지 않고 "읽기 전용"모드로 열어 본 입력 파일에 쓰는 중입니다!

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

typedef struct s{ 
int max; 
double length, width; 
char people[10]; 
} max_t; 

int main() 
{ 
    FILE *database, *out; 
    //int inp, out; 
    max_t inp; 
    database = fopen("database.txt", "r"); 
    out = fopen("out.txt", "wb"); 
    fscanf(database, "Max : %d", &inp.max); 
    fscanf(database, "Width : %lf", &inp.width); 
    fscanf(database, "Length : %lf", &inp.length); 
    fscanf(database, "People : %s", inp.people); 
    fwrite(&inp.max, 1, sizeof(inp.max), out); 
    fwrite(&inp.width, 1, sizeof(inp.width), out); 
    fwrite(&inp.length, 1, sizeof(inp.length), out); 
    fwrite(inp.people, 1, sizeof(inp.people), out);  
    fclose(database); 
    fclose(out); 
    return(0); 
} 

편집 : 주() & 구조를

+0

나는 그것이 r/w하고 있다고 생각 :/나쁘다. 위에서 언급 한 변경 사항을 만들었지 만 경고 메시지가 표시됩니다. 'fwrite'인수 4를 전달하면 캐스팅하지 않고 정수에서 포인터가 만들어 지지만 그 순간을 고치려고합니다. 감사합니다 – Hamas4

+0

@ Hamas4 : 나는 주 편집했다. 나는 구조체를 사용하는 것을 잊었다 : –

+0

고마워! 이것은 어리석은 소리가 될 것이지만, 왜 내 구조가 주된 곳에서 발견되지 않는 이유가 있을까요? 그것은 최대, 너비, 길이, 사람들이 선언하지 않은 것을 계속 말해줍니다. – Hamas4

0

당신이해야 할 모든 바이너리 형식의 파일로 장소 데이터 인 경우, 다음 나중에 stdio.hfwrite와 파일에 원시 바이트를 덤프 수를 읽어 주셔서 감사합니다.

해당 데이터를 읽으려면 fread을 사용할 수 있습니다.

frwite을 사용하여 파일에 바이트를 배치하면 나중에 다시 읽을 때 어떤 바이트가 무엇을 나타내는 지 기억해야합니다.

예 txt 파일 : 당신이 할 수있는 바이너리 형식으로이 값을 쓰고 그 다음

// fp -- FILE * -- file pointer 
fscanf(fp, "width : %d", &width); 
fscanf(fp, "height : %d", &height); 

: 당신은 2 항과 3 항에서 읽을 호출 fscanf 몇 가지를 사용할 수 있습니다

width : 2 
height : 3 

3 1 
2 3 
2 1 

frwite(&width, 1, sizeof(width ), fp); 
frwite(&height, 1, sizeof(height), fp); 

파일의 나머지 부분을 읽고 다른 파일로 이진 형식으로 전송하면 동일합니다. 프로세스.

+0

주 프로그램에서 사용했기 때문에 fwrite를 사용할 수 있지만 바이너리로 변환하려는 파일에 fwrite를 사용합니까? – Hamas4

+0

'frwrite'를 호출하고 파일에 넣을 데이터를 지정하면됩니다. 이 데이터는 이진 형식으로 파일에 기록됩니다. fscanf를 사용하여 데이터를 텍스트 형식으로 읽을 수 있습니다. 내 게시물을 편집하고 간단한 예를 제공합니다. – RandyGaul

+0

FP는 무엇을 의미합니까? 나는 나의 책에서 그 표기법을 보지 못했다 – Hamas4

관련 문제