Цель C: записать в строку csv (txt), содержащуюся в некотором текстовом поле - PullRequest
0 голосов
/ 06 апреля 2011

В моем проекте у меня есть представление, где я пишу слова в некотором текстовом поле, когда я нажимаю кнопку, эта строка должна быть сохранена в CSV-файле, как в этом примере: (пример с 5 текстовыми полями)

firststring#secondstring#thirdstring#fourthstring#fifthstring;

это пример результата, который я хочу. Как я могу это сделать?

Отредактировано, чтобы добавить:

код для строки

 NSMutableString *csvString = [NSMutableString stringWithString:textfield1.text];
[csvString appendString:@"#"];
[csvString appendString:textfield2.text];
[csvString appendString:@"#"];
[csvString appendString:dtextfield3.text];
[csvString appendString:@"#"];
[csvString appendString:textfield4.text];
[csvString appendString:@"#"];
[csvString appendString:textfield5.text];
[csvString appendString:@"#"];
[csvString appendString:textfield6.text];
[csvString appendString:@"#"];
[csvString appendString:textfield7.text];
[csvString appendString:@"#"];
if (uiswitch.on) { //switch
    [csvString appendString:@"1"];
}
else [csvString appendString:@"0"];
[csvString appendString:@";"];

наконец-то csvString

NSLog(@"string = %@", csvString);

это точно моя строка

Ответы [ 7 ]

3 голосов
/ 07 апреля 2011

Помимо проблем с форматом CSV, похоже, что вы пытаетесь записать в основной пакет, что запрещено.
Может работать в симуляторе, но не на устройстве.
См. Разделы Безопасность и Файловая система в Руководстве по программированию приложений для iOS .

Вместо этого вам нужно будет создать файл в папке tmp или Documents. Например:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filename = [docDir stringByAppendingPathComponent:@"Client.txt"]; 
NSError *error = NULL;
BOOL written = [csvString writeToFile:filename atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!written)
    NSLog(@"write failed, error=%@", error);
2 голосов
/ 07 апреля 2011

Так же, как отмечалось в моем ответе на другой, почти идентичный вашему, вопрос сегодняшнего дня: не делайте этого.

Как только пользователь вводит "#" или ";" в одно из текстовых полей ваш CSV-файл (или, точнее, то, что вы называете CSV-файлом, но на самом деле его вообще нет) будет поврежден и приведет к сбою кода после повторного чтения (или, по крайней мере, к искаженным данным).

Опять же: Do NOT . Сделайте это.

Вместо этого: придерживайтесь настоящего CSV и парсера / автора, написанного профессионалом .

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

Языки / форматы, такие как CSV, на первый взгляд кажутся тривиальными, но ни в коем случае не являются (как в language-2-language ).

1 голос
/ 07 апреля 2011

Взгляните на документацию NSString Я полагаю, вы можете искать:

writeToFile:atomically:encoding:error:
1 голос
/ 06 апреля 2011

Что вам нужно, так это CHCSVParser Дейва Делонга (который также поддерживает запись в CSV)

Чтобы дать правильный ответ, вам нужно предоставить больше информации.

Сначалаиз всей предоставленной вами строки нет действительного CSV.Он не использует запятые («C» в CSV) для разделения полей строк.И он заканчивается точкой с запятой, в то время как CSV будет ожидать перевода строки.

Таким образом, чтобы получить правильный вывод файла CSV, вы должны сделать:

#import "CHCSVWriter.h"

//...

NSArray *fields = [NSArray arrayWithObjects:@"firststring", @"secondstring", @"thirdstring", @"fourthstring", @"fifthstring", nil];

CHCSVWriter *writer = [[CHCSVWriter alloc] initWithCSVFile:filePath atomic:YES];
[writer writeLineWithFields:fields];
[writer closeFile];

Что приведет к правильному CSVà la:

"firststring", "secondstring", "thirdstring", "fourthstring", "fifthstring"

или:

firststring,secondstring,thirdstring,fourthstring,fifthstring

в зависимости от конфигурации.


Чтобы получить выходные данные, соответствующие вашему образцу, однако:

NSArray *fields = [NSArray arrayWithObjects:@"firststring", @"secondstring", @"thirdstring", @"fourthstring", @"fifthstring", nil];
NSString *outputString = [[[fields componentsJoinedByString:@"#"] appendString:@";\n"]];
[outputString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

Последнее очень подвержено ошибкам.Как только одна из этих строк содержит "#", ";"или "\ n".

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

Пример:

NSString *myString = myUITextField.text;

в OSX (<= 10.6), который вы будете использовать:</p>

NSString *myString = [myNSTextField stringValue];
0 голосов
/ 07 апреля 2011

В соответствии с описанием класса NSString параметр ошибки должен быть NULL , а не nil в методе writeToFile, если вы не хотите фиксировать подробности ошибки.

Ссылка класса NSString

Проверьте возвращаемое значение метода writeToFile, если он возвращает NO, произошла ошибка записи в файл или кодировку:

BOOL result = [csvString writeToFile:pathToFile atomically:YES encoding:NSUTF8StringEncoding error:NULL];
NSLog(@"Result of writeToFile: %@", result ?@"YES":@"NO");
0 голосов
/ 07 апреля 2011

Если у вас есть строка, указанная выше, используйте

NSString * csvStr = [yourstring stringByReplacingOccurferencesOfString: @ "#" withString: @ ","];

для записи в файл -

сначала определите путь к файлу "#define DataFilePath [@" ~ / Documents / a.txt " stringByStandardizingPath] "

тогда в реализации

NSData * data = [NSPropertyListSerialization dataFromPropertyList: [NSArray arrayWithObjects: csvStr, ноль] Формат: NSPropertyListXMLFormat_v1_0 ErrorDescription: ноль];

[data writeToFile: DataFilePath атомарно: ДА];

0 голосов
/ 06 апреля 2011

Во-первых, вам нужно создать выходы в вашем объекте контроллера, которые подключаются к вашим текстовым полям.Затем используйте следующий код для сборки строки CSV:

NSMutableString *csvString = [NSMutableString stringWithString:[textFieldOne stringValue]];
[csvString appendString:@"#"];
[csvString appendString:[textFieldTwo stringValue]];
[csvString appendString:@"#"];
[csvString appendString:[textFieldThree stringValue]];
[csvString appendString:@"#"];
[csvString appendString:[textFieldFour stringValue]];
[csvString appendString:@"#"];
[csvString appendString:[textFieldFive stringValue]];

Затем вы можете просто записать NSMutableString в файл с расширением .CSV.

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