Разбор файла свойств Java в Objective-C для iPhone - PullRequest
5 голосов
/ 06 сентября 2011

Я ищу способ в iPhone SDK прочитать файл свойств (не XML-вариант), например, такой:

# a comment
! a comment

a = a string
b = a string with escape sequences \t \n \r \\ \" \' \ (space) \u0123
c = a string with a continuation line \
    continuation line
d.e.f = another string

даст четыре пары ключ / значение.1004 *

Я не могу изменить этот формат, так как он отправляется мне веб-службой.Не могли бы вы направить меня?

Спасибо, Эммануэль

Ответы [ 6 ]

3 голосов
/ 22 апреля 2015

Я закончил с этим решением, если кто-то заинтересован:

@interface NSDictionary (PropertiesFile)

+ (NSDictionary *)dictionaryWithPropertiesFile:(NSString *)file;

@end

@implementation NSDictionary (PropertiesFile)

+ (NSDictionary *)dictionaryWithPropertiesFile:(NSString *)file {
    NSError *error = nil;
    NSString *propertyFileContent = [[NSString alloc] initWithContentsOfFile:file encoding:NSUTF8StringEncoding error:&error];
    if (error) return nil;

    NSArray *properties = [propertyFileContent componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    if (properties.count == 0) return nil;

    NSMutableDictionary *result = [[NSMutableDictionary alloc] initWithCapacity:properties.count];
    for (NSString *propertySting in properties) {
        NSArray *property = [propertySting componentsSeparatedByString:@"="];

        if (property.count != 2) continue;

        [result setObject:property[1] forKey:property[0]];
    }
    return result.allKeys.count > 0 ? result : nil;
}

@end
3 голосов
/ 16 сентября 2011

Я бы взглянул на ParseKit http://parsekit.com/. В противном случае вы можете использовать RegexKitLite и создать несколько регулярных выражений.

2 голосов
/ 12 сентября 2011

Это очень простая задача анализа. Прочитайте строку. Игнорировать, если комментарий. Проверьте продолжение и прочитайте / добавьте строки продолжения по мере необходимости. Ищите «=». Сделайте левую сторону клавиши «=» (после обрезки пробела) ключом. Либо самостоятельно проанализируйте правую сторону, либо поместите ее в строку NSString и используйте для нее stringWithFormat, чтобы «уменьшить» любые переходы до чисто символьной формы. Верните ключ и уменьшите правую сторону.

(Но при обновлении памяти в формате файла свойств напоминает мне, что:

Ключ содержит все символы в строке, начинающейся с первый символ без пробелов и до, но не включая, первый неэкранированный символ '=', ':' или символ пробела, отличный от строки терминатор. Все эти ключевые символы завершения могут быть включены в ключ, экранируя их с предыдущим символом обратной косой черты;

Таким образом, требуется небольшое сканирование линии, чтобы отделить ключ от остальных. Ничего особенно сложного, хотя.)

1 голос
/ 14 сентября 2011

Рассматривали ли вы использование lex / yacc или flex / bison для генерации собственного кода компилятора из описания грамматики для файлов свойств?Я не уверен, есть ли какие-либо существующие грамматики, определенные для файла свойств Java, но кажется, что это была бы довольно простая грамматика для записи.этот подход для анализа общего назначения

0 голосов
/ 09 августа 2013

Взгляните на это PropertyParser

NSString *text = @"sample key = sample value";

PropertyParser *propertyParser = [[PropertyParser alloc] init];

NSMutableDictionary *keyValueMap = [propertyParser parse:text];
0 голосов
/ 05 января 2012

Теперь вы можете использовать NSRegularExpression класс для этого.

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