N 個のテキスト ファイル (同様の構造を持つ: 数行、各行には同じ少数の単語が含まれる) から読み取り、読み取った単語を文字列行列に格納したいと思います。ポジション 一言。
ファイルの簡単な例 (2 行、1 行に 3 語) は次のとおりです。
line1word1 line1word2 line1word3
line2word1 line2word2 line2word3
単語の区切り文字はスペースです。
私はこのコードを試みました:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STRING_LENGTH 1000
#define MAX_TOKS 100
#define DELIMITERS " "
// line parsing utility
int parseString(char* line, char*** argv) {
char* buffer;
int argc;
buffer = (char*) malloc(strlen(line) * sizeof(char));
strcpy(buffer,line);
(*argv) = (char**) malloc(MAX_TOKS * sizeof(char**));
argc = 0;
(*argv)[argc++] = strtok(buffer, DELIMITERS);
while ((((*argv)[argc] = strtok(NULL, DELIMITERS)) != NULL) &&
(argc < MAX_TOKS)) ++argc;
return argc;
}
int main() {
char S[MAX_STRING_LENGTH];
char **A;
int n,i,j,l;
FILE *f;
char file[50];
char ***matrix;
matrix = malloc(MAX_TOKS * sizeof(char**));
//memory allocation for matrix
for (i = 0; i < MAX_TOKS; i++)
{
matrix[i] = malloc(MAX_TOKS * sizeof(char *));
for (j = 0; j < MAX_TOKS; j++)
{
matrix[i][j] = malloc(MAX_TOKS * sizeof(char));
}
}
int NFILE = 10; // number of files to be read
for(i=0;i<NFILE;i++)
{
sprintf(file,"file%d.txt",i);
f = fopen(file,"r");
l=0; // line-in-file index
while(fgets(S,sizeof(S),f)!=NULL) {
n = parseString(S,&A);
for(j=0;j<n;j++) {
matrix[i][l]=A[j];
printf("%s\t%s\n",matrix[i][l],A[j]);
}
l++;
}
fclose(f);
}
free(matrix);
free(A);
return(0);
}
私が解決できない問題は、配列間の対応をチェックするときに(単一の単語を正しく保存していることを確認するために)、
printf("%s\t%s\n",matrix[i][l],A[j]);
ファイル番号に関係なく、各行の最後の単語 (および最後の単語のみ) が に格納されていないことがわかりましたmatrix
。つまり、line1word1
とline1words
のfile0
は と に正しく格納されmatrix[0][0][0]
ますがmatrix[0][0][1]
、フィールドには がありmatrix[0][0][2]
ません。line1word3
A[2]
私は何をしているのですか?なにか提案を?
よろしくお願いします。