2017-04-07 1 views
0

テキストファイルから単語の配列を作成しようとしています。私は値を正しく出力するためにそれを得ることができますが、私は実際に使用できる配列が必要です。私がこの配列を作った後は、それぞれの長さを数えるなど、私が保存した言葉にさまざまなことをしなければなりません。今のところ私は実際に作業できる配列を作るのに役立つだけです。C TexFileから配列を作成する

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


int main (int argc, char* argv[]){ 
    // First Read in First novel File 
    FILE *fp; 
    char *ProgFile; 

    // Variables for Parsing 
    int i = 0; 
    int j=0; 
    char *cp; 
    char *bp; 
    char line[255]; 
    char *array[5000]; 
    int x; 
    int wordCount=0; 
    int wordCountPerNovel; 


    // Adjusting the file name to include txt and corresponding number 
    strcat(argv[1],"_1.txt"); 
    ProgFile = argv[1]; 

    // Open Each File 
    fp=fopen(ProgFile,"r"); 
    if(fp==NULL)printf("error"); 
    else printf("bin file loaded: '%s'",ProgFile); 
    // Now begin analysing 
    // Part 1 
    // Parse Entire Document into Array of Strings 
    while (fgets(line, sizeof(line), fp) != NULL) { 
      bp = line; 
      while (1) { 
        cp = strtok(bp, ",.!?<97> \n"); 
        bp = NULL; 
        if (cp == NULL)break; 
        array[i++] = cp; 
        printf("Check print - word %i:%s:\n",i-1, cp); 
      } 
    } 
    // At this point i is the last word that was iterated, -1 since it breaks out after being added 
    // This gets total words of all novels 

    wordCount=wordCount+(i-1); 
    printf("\nTotal words %i\n",wordCount); 
    // Find Total number of letters 
    //for (i=1;i<15;i++){ 
    //  printf("My value: %s \n",finalArrayWord[i]); 
    // 
    //} 
+0

あなたが実際に質問をしていなかった(ここではあなたの配列です)。 – melpomene

+0

*実際に*で動作する*配列は何ですか? – Arash

+0

1) 'strcat(argv [1]、" _ 1.txt ");'これはできません。 – BLUEPIXY

答えて

1

コードはコンパイルされませんでした。ここで

はコードです。長さを知っていればchar配列を使うことができ、ファイルから配列を読み込むのにmallocを使う必要はありません。

ファイル1.TXT

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatu 

コード

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

void read_words (FILE *f) { 
    char x[1024]; 
    char **a; 
    a = malloc(1024 * sizeof(char*)); 
    for (int i = 0; i < 1024; i++) 
     a[i] = malloc((1024+1) * sizeof(char)); 
    int i = 0; 
    while (fscanf(f, " %1023s", x) == 1) { 
     strcpy(a[i], x); 
     i++; 
    } 
    for (int j = 0; j < i; j++) { 
     printf("%d %s\n", j, a[j]); 
    } 
} 
int main(void){ 
    read_words(fopen("1.txt", "r")); 
    return 0; 
} 

テストは

$ ./a.out 
0 Sed 
1 ut 
2 perspiciatis 
3 unde 
4 omnis 
5 iste 
6 natus 
7 error 
8 sit 
9 voluptatem 
10 accusantium 
11 doloremque 
12 laudantium, 
13 totam 
14 rem 
15 aperiam, 
16 eaque 
17 ipsa 
18 quae 
19 ab 
20 illo 
21 inventore 
22 veritatis 
23 et 
24 quasi 
25 architecto 
26 beatae 
27 vitae 
28 dicta 
29 sunt 
30 explicabo. 
31 Nemo 
32 enim 
33 ipsam 
34 voluptatem 
35 quia 
36 voluptas 
37 sit... 
+0

これはエラーです。 – Mmsyther

+0

ここで動作する必要のあるテストファイルです。 – Mmsyther

+0

Loomings 私に電話するIshmael。何年か前には、私の財布にどれくらいの金額がかかっていて、海岸で私に興味をそそられるものが何であるかについて、私はちょっと航海して、世界の水の部分を見ると思っていました。それは私が脾臓を追い払い、循環を調節する方法です。私は自分自身が口の中でひどく成長しているのを見つけるたびに、それが湿っているときはいつでも、私の魂の中では11月になる。私がmysを見つけるたびに – Mmsyther

関連する問題