Рендеринг строки рисунка ASCII с символами новой строки и обратной косой чертой

Я делаю приложение, в котором требуется хранить искусство ASCII в базе данных. Я храню строки в следующем формате.

"___________\n |---------|-O\n/___________\\n|______________|\n\____________/"

Когда я извлекаю данные и отображаю их в метке, я хочу, чтобы символы новой строки и обратные косые черты анализировались, чтобы отобразить реальную форму изображения ASCII.

Как мне разбирать такие строки?


person Parth Bhatt    schedule 04.12.2010    source источник


Ответы (3)


У NSString есть способ сделать то, что вы хотите, а именно заменить литерал \n символом новой строки (который обозначается как \n). В строке формата c вы можете использовать двойную косую черту, чтобы сообщить библиотеке, что вторая косая черта является реальной, а не escape-символом. Так что это должно работать, если вы смогли загрузить свои данные из sqlite в NSString:

newString = [yourStringFromSQLite stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
person Brad The App Guy    schedule 04.12.2010

Если вы используете \n только для создания новых строк, то вместо этого просто оставьте место при вставке значения в базу данных и установите следующие свойства для метки ->
1) сохраните ширину, чтобы она соответствовала первому слову. 2)linebreakmode для переноса слов (поскольку ширина не будет доступна, следующее слово будет перенесено на новую строку)
3)установите no. строк до 0
Надеюсь, это поможет.

person Javal Nanda    schedule 04.12.2010

попробуйте использовать сканер для удаления html-объектов

- (NSString *)flattenHTML:(NSString *)html trimWhiteSpace:(BOOL)trim {         
    NSScanner *theScanner;
    NSString *text = nil;
    theScanner = [NSScanner scannerWithString:html];
    while ([theScanner isAtEnd] == NO) {
        [theScanner scanUpToString:@"<" intoString:NULL] ;                 
        [theScanner scanUpToString:@">" intoString:&text] ;
        html = [html stringByReplacingOccurrencesOfString:[ NSString stringWithFormat:@"%@>", text] withString:@" "];
    } 
    return trim ? [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] : html;
}

и вызовите этот метод, где ваша обрезанная строка должна отображаться

person Sri    schedule 04.12.2010
comment
Я не думаю, что он пытается удалить html-теги, а только заменить вхождения '\n' фактическими символами новой строки. - person Brad The App Guy; 04.12.2010
comment
@Brad - тогда stringByReplacement - лучшее предложение - person Sri; 04.12.2010