0

まだCをいじっている段階です。ここで何が間違っているのかわかりませんが、ポインターに関係していると思います。ともかく。タブ区切りのテキスト ファイルを読み込んで解析し、2D 配列にしようとしています。実際の配列は 6109 x 14 です。より大きなポインター配列を割り当てました。

FILE *in = fopen("afile","rt");
// read the first line from the file
char line[2000];
int x=0;
int y=0;
char *result[7000][14];
char *curResult;
char delim[]= "\t";

while (fgets(line, 2000, in) != NULL) {
    printf("LINE IS %s\n",line);
    curResult=NULL;
    curResult = strtok(line,delim);
    y=0;
    while( curResult != NULL ) {
        result[x][y]= curResult;
        curResult = strtok( NULL, delim );
        y++;
    }
    x++;
}

//print a random line to check 
for(int i=0; i<10; i++)
    printf("%s\n", result[50][i]);

一番下に印刷した行は、50 行目で、テキスト ファイルの最後の行を印刷します。50 ではなく別の数値で試してみましたが、すべて同じ結果が出力されます。

編集: afile は次のようになります。

  instance_id   batch_id    cmap_name   INN1    concentration (M)   duration (h)    cell2   array3  perturbation_scan_id    vehicle_scan_id4    scanner vehicle vendor  catalog_number  catalog_name
1   1   metformin   INN 0.00001 6   MCF7    HG-U133A    EC2003090503AA  EC2003090502AA  HP GeneArray Scanner    medium  Sigma-Aldrich   D5035   "1,1-dimethylbiguanide hydrochloride"
2   1   metformin   INN 0.00001 6   MCF7    HG-U133A    EC2003090504AA  EC2003090502AA  HP GeneArray Scanner    medium  Sigma-Aldrich   D5035   "1,1-dimethylbiguanide hydrochloride"
3   1   metformin   INN 0.0000001   6   MCF7    HG-U133A    EC2003090505AA  EC2003090502AA  HP GeneArray Scanner    medium  Sigma-Aldrich   D5035   "1,1-dimethylbiguanide hydrochloride"
4   1   metformin   INN 0.001   6   MCF7    HG-U133A    EC2003090506AA  EC2003090502AA  HP GeneArray Scanner    medium  Sigma-Aldrich   D5035   "1,1-dimethylbiguanide hydrochloride"
21  2   phenformin  INN 0.00001 6   MCF7    HG-U133A    EC2003091104AA  EC2003091102AA  HP GeneArray Scanner    medium  Sigma-Aldrich   P7045   phenformin hydrochloride
22  2   phenyl biguanide        0.00001 6   MCF7    HG-U133A    EC2003091105AA  EC2003091102AA  HP GeneArray Scanner    medium  Sigma-Aldrich   P19906  1-phenylbiguanide hydrochloride
23  2   valproic acid   INN 0.001   6   MCF7    HG-U133A    EC2003091106AA  EC2003091102AA  HP GeneArray Scanner    medium  Sigma-Aldrich   P4543   2-propylpentanoic acid
61  2a  metformin   INN 0.00001 6   MCF7    HG-U133A    EC2003091103AA  EC2003091102AA  HP GeneArray Scanner    medium  Sigma-Aldrich   D5035   "1,1-dimethylbiguanide hydrochloride"
4

1 に答える 1

1

イマジンlineは、たくさんの文字を入れることができる大きな箱です。
それがあなたがすることですfgets()

次に、そのボックス内の特定の文字をポイントします。

次に、ボックスの内容を (別fgets()の同じ変数にline) 置き換え、ポインターはもちろん同じボックスを指していますが、新しい文字を指しています。

ループ内のどこかに文字をコピーする必要があります(最初に十分なスペースがあることを確認してくださいstrcpy()) 。

于 2012-04-17T17:59:58.067 に答える