2014-01-24 3 views
9

Я новичок в iOS и пытаюсь прочитать содержимое электронной таблицы в массиве iOS. Таблицей, которую я использую, является простой массив чисел 3 x 2 для первого столбца и текст для второго. Я пробовал читать его с помощью & без заголовков столбцов, в .xls, .xlsx,. cdv, .txt (unicode и ограниченный), но без успеха. Файл называется «фонды», а код я использую:Чтение данных из .xls/.csv файлов в iOS

NSData  *databuffer; 
NSFileHandle * file; 
NSString  *docDir = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0]; 
NSString  *fileDir = [docDir stringByAppendingPathComponent:@"funds.xls"]; 

file = [NSFileHandle fileHandleForReadingAtPath:fileDir]; 
if (file == nil) NSLog (@"Failed to open file"); 

[file seekTOOffset: 10]; 
databuffer = [file readDataOfLength: 5]; 
[file closeFile]; 

Он находит каталог файла, но отдает в [NSFileHandle fileHandleForReadingAtPath:fileDir].

Что мне делать? Мне нужна помощь в подтверждении того, какой тип файла я должен использовать в качестве источника, и как его прочитать в массиве.

Когда это будет разрешено, мне, вероятно, потребуется прочитать большое количество данных, несколько столбцов, строки 4k, смесь текста & нецелых чисел.

Есть ли формат или метод, который я должен использовать, когда объем данных достигает такого размера?

+0

Где находится файл? В вашем комплекте? – footyapps27

+0

Прошу прощения за то, что я так долго ответил, работа обогнала меня. Файл хранится в комплекте. Ответ altyus кажется лучшим долгосрочным решением, но я изо всех сил пытаюсь разгадать github! – user2903240

ответ

5

Обязательно экспортируйте данные из Excel в CSV format.

Это простой в использовании NSFileManager для доступа к файлу:

NSString *pathName = ...; /// fill in the file's pathname 
NSFileManager *fm = [NSFileManager defaultManager]; 
if ([fm fileExistsAtPath:pathName]) { 
    // read the file contents, see below 
} 

Для маленьких файлов, вы можете просто сказать:

NSString *lines = [NSString stringWithContentsOfFile:filePath]; 

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

Для больших файлов лучше взгляните на некоторые более сложные методы, например, в Objective-C: Reading a file line by line.

Как для разбора строки CSV, используйте NSString метод componentsSeparatedByString чтобы разметить каждую строку, что-то вроде:

NSArray *fields = [line componentsSeparatedByString:@","]; 

На самом деле, это также то, что вы будете использовать, чтобы разделить содержимое файлов, которые вы прочитали в отдельные строки. Просто обратите внимание на линейные каналы (CR LF или LF). Вы найдете что-то в how to split a string with newlines.

+0

Это не будет правильно разобрать строки с запятыми. .csv-файл может иметь запятые внутри значений, например один, «String, with, comma», Three –

+0

Ну, он также не будет обрабатывать цитируемые значения. Это был наивный пример. Будем надеяться, что к настоящему времени люди нашли RFC 4180 и используют приличную библиотеку парсеров CSV. –

3

Существует очень популярный проект CocoaPod/Github, который будет писать и анализировать файлы CSV. https://github.com/davedelong/CHCSVParser

+0

Поскольку OP новый с iOS, может быть сложно охватить CocoaPods, но это было бы здорово для дальнейшего продвижения по линии. Я также нашел это весьма полезным, так что спасибо за это. –

+0

Вот почему я обязательно упомянул, что есть проект Github. В прилагаемой ссылке Github есть инструкции по добавлению проекта непосредственно путем клонирования репозитория Github. Но просто разложите плакат, заинтересованный в использовании Cocoa Pods (и (и) он должен быть), вот ссылка на использование какао-стручков в вашем проекте (это очень просто). http://cocoapods.org/ и нажмите «начать». – altyus

+1

Согласен, с CocoaPods легче начать, чем можно было бы подумать. Даже простой формат, такой как CSV, имеет некоторые потенциальные осложнения, поэтому хорошо иметь твердый компонент. Кроме того, он использует NSInputStream, поэтому для больших файлов также должно быть хорошо. –

-1

Я использую Numbers create csv, и у меня проблема, когда я добавляю «,» в таблицу. Я использую какой-то трюк, чтобы исправить это. Извините, я пытаюсь добавить здесь пример кода, но он слишком длинный.

https://github.com/LovePick/CSVParser-Swift

-1

Существует библиотека для обработки XLSX файлов прошивкой. Его написано в Objective-C, но вы также можете использовать его с Swift, используя заголовок. XlxsReaderWriter on GitHub Вы можете прочитать файл XLSX, используя

let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(outPath.path) 
let workSheet : BRAWorksheet=spreadsheet.workbook.worksheets?[0] as! BRAWorksheet; 

Я думал, что это может помочь кому-то, как я, ища для чтения XLSX файлов.

+0

Хотя это может теоретически ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – moggi

Смежные вопросы