NSString поиск подстроки / CSV File IO - PullRequest
0 голосов
/ 23 августа 2011

Это дало мне довольно большую головную боль.По какой-то причине, когда я использую этот код, оператор if всегда оценивается как false:

while(!feof(file))
{
    NSString *line = [self readNSString:file];
    NSLog(@"%@", line);
    NSLog(@"%@", search);
    NSRange textRange;
    textRange =[line rangeOfString:search];

    if(textRange.location != NSNotFound)
    {
        NSString *result = [line substringFromIndex:NSMaxRange([line rangeOfString:search])];
        resultView.text = result;
    }
    else
    {
        resultView.text = @"Not found";
    }
}

Когда функции выполняются, два NSLogs сообщают мне, что строки "line" и "search" - это то, что онидолжно быть, так почему тогда оператор if всегда принимает значение false?Я, должно быть, упускаю что-то простое, было бы здорово иметь другой набор глаз.Спасибо

edit: (функция "readNSString")

- (NSString*)readNSString:(FILE*) file
{
    char buffer[300];

    NSMutableString *result = [NSMutableString stringWithCapacity:256];
    int read;
    do
    {
        if(fscanf(file, "%299[^\n]%n%*c", buffer, &read) == 1)
            [result appendFormat:@"%s", buffer];
        else
            break;
    } while(r == 299);

    return result;
}

edit 2:

поиск установлен с вызовом первой функции, с переменной NSString * в качествепараметр, подобный этому:

NSString *textFieldText = [[NSString alloc]
                              initWithFormat:@"%@", textField.text];

[self readFile:textFieldText];

изменить 3 (вывод NSLogs)

строка: Германия Италия Франция

поиск: Италия

1 Ответ

2 голосов
/ 23 августа 2011

Я думаю, что вы используете rangeOfString, NSNotFound и т. Д. Правильно, поэтому проблема, возможно, связана с созданием строки из данных, считанных из файла с использованием appendFormat:@"%s".

Я подозреваю, что между вашими двумя строковыми форматами может быть проблема с кодировкой - я бы выяснил, правильно ли кодирует "% s" строку C с нулевым символом в конце в тот же формат, что и уникод NSString с соответствующей кодировкой..

Попробуйте жестко запрограммировать значение, которое вы получаете от функции readNSString, в виде строкового литерала в коде просто для тестирования и посмотрите, работает ли это сравнение, если это так, то это, как правило, указывает на то, что, вероятно, что-то нужно делатьс кодировкой строки, созданной из файла.

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