0

47,000 語を超えるファイル (辞書) の内容を取得しようとしています。私の目標は、乱数を生成し、ファイルの特定の行にある単語を見つけて、プログラムを実行するたびに異なる単語を取得し、その単語を出力することです。私は研究してきましたが、答えが見つかりませんでした。これは私がこれまでに持っているものです。文字しかかかりませんが、言葉が欲しい

//
//  main.m
//  wordaday
//
//  Created by Eddy Guzman on 11/5/13.
//  Copyright (c) 2013 Eddy Guzman. All rights reserved.
//

#import <Foundation/Foundation.h>

bool checkFile( NSString * path)
{
    NSFileManager *filemgr;

    filemgr = [NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath: path ] == YES)
    {
        return TRUE;
        NSLog (@"File exists");
    }

    else
    {
        NSLog (@"File not found");
        return false;
    }

}

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // insert code here...
        NSLog(@"Hello, World!");
        NSString * path = @"/Users/eddy30/Eddy's Documents/School/Millersville/Fall2013/wordaday/dictionary.txt";



        if(checkFile(path) == TRUE)
        {
            NSLog(@"WOHOOOO");
        }

        NSString* content = [NSString stringWithContentsOfFile:path];

        //NSFileHandle *myFile = fileHandleForReadingAtPath:path;
        int rand = arc4random_uniform(47049);
        char Word = [content characterAtIndex:rand];


        NSLog(@"Word of the day is: %c", Word);
    }
    return 0;
}
4

1 に答える 1

0

このステップの間:

NSString* content = [NSString stringWithContentsOfFile:path];

そしてこのステップ:

char Word = [content characterAtIndex:rand];
NSLog(@"Word of the day is: %c", Word);

うーん。これは非常に紛らわしいです。そのまま、ファイル全体をNSString呼び出された に読み込み、contentその中からランダムな文字を選び出し、NSString単語であると主張して出力します。

このプログラムを実際にどのように修正するかは、読んでいるファイルの形式に大きく依存します。配列の各インデックスが辞書内の異なる単語を表す of に変換contentする手順が必要です。たとえば、ファイルが 1 行に 1 単語ずつ含まれている場合は、次の便利な方法を使用する必要があります。NSArrayNSStrings

NSArray *arrayOfWords = [content componentsSeperatedByString:@"\n"];

次に、ランダムに生成さintれたインデックスをこの配列のインデックスとして使用し、次のようにログに記録します。

NSLog(@"Word of the day is: %@", [arrayOfWords objectAtIndex:rand]);

元の質問に詳細がなければ、私がお手伝いできることはこれ以上ありません。元のファイルの形式がわかりません。あなたが辞書であると主張している元のファイルに定義などが含まれているかどうかはわかりませんが、この回答はあなたがやりたいことの要点を説明しています。


編集:注として、乱数を生成するときは、次のようにする必要があります。

int rand = arc4random_uniform([arrayOfWords count]-1);

範囲外のインデックスを避けるため。

于 2013-11-06T04:05:02.953 に答える