2014-10-14 4 views
-1

파일에서 문자열을 읽고 2 차원 배열 테이블에 넣는 방법은 무엇입니까? 텍스트 파일 :텍스트 파일에서 읽고 다중 2d 배열에 넣습니다.

0 0/0a 1/0b 2/0c 3/0d 4/0e 5/99 
1 0/0b 1/0b 2/99 4/0c 5/99 

따라서 0이 첫 번째 행은, 0/0A 수단 (0) (0,0)

그래서 1이 삽입되어 제 칼럼 (0A) 인 두 번째 행. 4/0c는 (4)가 (4)에 (4)

99를 의미하며 (00)로 교체해야 함을 나타냅니다. 그리고 열이 누락 된 경우 (예 : 두 번째 행 , 세 번째 열이 없으며 00으로 지정해야 함).

예상 출력 : 내가 지금까지했던

0 1 2 3 4 5 
0 0a 0b 0c 0d 0e 00 
1 0b 0b 00 00 0c 00 

코드 : 어디서부터 시작

int main(int argc, char*argv[]){ 
    FILE *fp; 
    fp = fopen(argv[1], "r"); 
    if(fp==NULL) return 1; 
    printf("File is open successfully.\n"); 
    char *ptr, buf[256]; 
    while((ptr = fgets(buf, 256, fp)) != NULL){ 
     printf("%s", ptr); 
    } 
    fseek (fp, 0, SEEK_SET); 
} 

가 난 그냥 종류의 손실입니다. 어떤 도움이라도 좋을 것입니다. 감사.

+0

지금 buf''에 대한 몇 가지 작업을 수행합니다

여기 내 코드입니다. Btw 왜'ptr'을 인쇄하고 있습니까? – user1336087

+0

열 개수는 어떻게 알 수 있습니까? 고정되어 5와 같습니까? 아니면 고정 된 크기의 필드에 공백이 오는 입력이 있습니까? –

+0

@ 1336087, 확실하게 텍스트 파일을 인쇄하십시오. buf에 대한 예제를 알려주시겠습니까? – user4142604

답변

0

열의 수가 6 (0-5)보다 작 으면 strtok을 사용하여 줄을 분할하고 "%d"이라는 줄 번호를 가져 와서 줄 번호가 앞으로 건너 뛰면 빈 줄을 인쇄하십시오 역순으로 건너 뛰면 오류입니다.)

그런 다음 "%d/%x"으로 열을 단계별로 설정하고 결국 0으로 설정 한 열을 설정하고 0x99 인 경우 열을 0으로 설정합니다 (16 진수로 읽음).

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

#define MAX 6 

int main(int argc, char *argv[]) { 
    FILE *fp; 
    int data[MAX]; 
    char *ptr, buf[256], *ix; 
    int line = 0, i, j, col = MAX; 
    fp = fopen(argv[1], "r"); 
    if(fp==NULL) return 1; 
    printf("File is open successfully.\n"); 
    while((ptr = fgets(buf, 256, fp)) != NULL){ 
     // printf("%s", ptr); 
     ix = strtok(buf, " "); 
     if (ix == NULL) break; 
     if ((sscanf(ix, "%d%*c", &i) != 1) || (i < line)) { 
      fprintf(stderr, "Error line %d indicated as %d\n", line, i); 
      return 1; 
     } 
     while (line < i) { 
      for(j=0; j<col; j++) printf(" 00"); 
      printf("\n"); 
     } 
     col = 0; 
     while (ix = strtok(NULL, " ")) { 
      if (col >= MAX) { 
       fprintf(stderr, "Too much elements line %d (more than %d)\n", line, MAX); 
       return 2; 
      } 
      if ((sscanf(ix, "%d/%x", &i, &j) != 2) || (col > i)){ 
       fprintf(stderr, "Incorrect syntax line %d elt %d\n", line, col); 
       return 3; 
      } 
      while(col < i) data[col++] = 0; 
      if (j == 0x99) j = 0; 
      data[col++] = j; 
     } 
     for(j=0; j<col; j++) printf(" %02x", data[j]); 
     printf("\n"); 
     line++; 
    } 
    fclose(fp); 
} 
+0

도움을 주셔서 감사합니다, 나는 그것이 어디로 가고 있는지 보았습니다. 또 다른 질문은 어떻게 열과 행을 표시합니까? 예 : 0 1 2 3 4 등 – user4142604

관련 문제