0

"player.geo" を定義したカスタム ファイルから float 値を 1 つずつ読み取りたいとします。

player.geo は、Xcode 4 を使用して作成したファイルです ([ファイル] > [新規] メニューの [空のファイル])。

私は現在、次のようにしようとしています:

- (id) initWithGeometryFile:(NSString *) nameOfFile
{
    NSFileHandle *geoFile = NULL;

    NSString *geoFilePath = [[NSBundle mainBundle] pathForResource:@"player" ofType:@"geo"];

    geoFile = [NSFileHandle fileHandleForReadingAtPath:geoFilePath];

    if(geoFile == NULL)
    {
        NSLog(@"Failed to open file.");
    }
    else
    {
        NSLog(@"Opening %@ successful", nameOfFile);

        NSMutableData *fileData = [[NSMutableData alloc] initWithData:[geoFile readDataOfLength:4]];

        float firstValue;
        [fileData getBytes:&firstValue length:sizeof(float)];

        NSLog(@"First value in file %@ is %f", nameOfFile, firstValue);
    }

    return self;
}

-64.0 という期待値が得られず、むしろ 0.0 が得られます。

これは正しい方法ですか?

ファイルを文字列として読み取ってから、文字列の内容をフロート解析してフロート値を取得する必要がありますか?

4

1 に答える 1

1

NSDataオブジェクトは文字列ではなく生のバイトを扱います。txt ファイルに文字列を入力している場合、これは機能しません。オブジェクトを使用している場合はNSData、最初に などのデータ オブジェクト メソッドを使用してデータを書き込む必要がありますwriteToFile:atomically:

別の方法として、次のように NSString 関数stringWithContentsOfFileを使用して、componentsSeperatedByString各文字列をそれぞれの行に含む NSArray を生成することもできます。

NSString *tmp;
NSArray *lines;
lines = [[NSString stringWithContentsOfFile:@"testFileReadLines.txt"] 
                   componentsSeparatedByString:@"\n"];

NSEnumerator *nse = [lines objectEnumerator];
while(tmp = [nse nextObject]) {
    NSLog(@"%@", tmp);
}
于 2011-08-06T15:12:54.223 に答える