Цель C: Как прочитать строку из файла, содержащего список строк, разделенных / n, и затем сохранить каждый символ строки отдельно - PullRequest
2 голосов
/ 05 марта 2010

Я создаю игру, похожую на вдохновителя для iPhone, и мне нужно сравнивать две строки символ за символом. Мне нужно выбрать строку из базы данных и сравнить ее со строкой, введенной игроком.

Я пробовал следующее, но, похоже, это не работает. Можете ли вы помочь мне.

//create file handle
NSFileHandle *file;
file = [NSFileHandle fileHandleForReadingAtPath:@"4db.txt"];

//read data into file in NSData format
NSData *filedata;
filedata = [file readDataToEndOfFile];

//convert NSData to NSString
NSString *string;
string = [[NSString alloc] initWithData:filedata encoding:NSASCIIStringEncoding]; 

//convert from string to array
NSArray *lines = [string componentsSeparatedByString:@"\n"]; 

//take one of the string and store it in sword
NSString *sword = [lines objectAtIndex:0];

//convert string to char
const char *word = [sword UTF8String];
sec[0] = word[0];
sec[1] = word[1];
sec[2] = word[2];
sec[3] = word[3];

Теперь я предполагаю, что sec содержит символы строки, которую я прочитал из файла. Это не похоже на работу. Пожалуйста, помогите. Любой другой эффективный метод был бы неплох, если бы вы могли предложить.

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Итак ..... что не работает?

То, что у вас есть, правильно ... иш. Я бы, наверное, сделал это так:

NSString * contents = [NSString stringWithContentsOfFile:@"db4.txt" encoding:NSASCIIStringEncoding error:nil];
NSArray * lines = [contents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSString * firstLine = [lines firstObject];

NSString * userEnteredString = ...;
if ([firstLine isEqualToString:userEnteredString]) {
  //the first line matches what the user entered
}

EDIT

Если он не может найти ваш файл db4.txt, значит, он ищет его не в том месте. Попробуйте что-то вроде:

NSString * dbFile = [[NSBundle mainBundle] pathForResource:@"db4" ofType:@"txt"];
NSString * contents = [NSString stringWithContentsOfFile:dbFile encoding:NSASCIIStringEncoding error:nil];
1 голос
/ 05 марта 2010

Вы прыгаете через немало обручей там. Вы можете инициализировать строку с содержимым файла одним оператором:

NSString *str = [NSString stringWithContentsOfFile:@"db4.txt"
                                          encoding:NSASCIIStringEncoding
                                             error:NULL];

Хотя в этом случае вы можете убедиться, что содержимое файла прочитано правильно, указав NSError *:

NSError *error;
NSString *str = [NSString stringWithContentsOfFile:@"db4.txt"
                                          encoding:NSASCIIStringEncoding
                                             error:&error];

if (fileContents == nil)
    NSLog (@"Error! %@", error);

Старайтесь использовать какао, когда можете. Если вы сравниваете строки, лучше преобразовать любые строки в стиле C в строки NSStrings и сравнить строки NSStrings, чем возвращаться к строкам в стиле C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...