2011-12-25 22 views
7

tôi đọc một tập tin CSV vào một mảng sử dụng:Tại sao mọi đối tượng khác trong mảng của tôi lại trống?

NSString *theWholeTable = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"csv"] 
                encoding:NSUTF8StringEncoding 
                 error:NULL]; 
NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

Và mọi đối tượng thứ hai trong mảng rỗng, bất kỳ ý tưởng tại sao?

file dữ liệu CSV trông như thế này: 10,156,326,614,1261,1890,3639,5800,10253,20914 20,107,224,422,867,1299,2501,3986,7047,14374

với 10 và 20 là bắt đầu mỗi dòng mới.

cảm ơn trước.

Sửa tôi đã cố gắng sử dụng đoạn mã sau thay vì:

NSArray *tableRows = [theWholeTable componentsSeparatedByString:@"\n"]; 

Và đó làm việc theo cách tôi muốn nó quá.

Mặc dù tôi vẫn không chắc chắn lý do tại sao newlineCharacterSet tạo đối tượng rỗng ...

+3

Tệp 'CSV' của bạn có xuất phát từ máy tính Windows không? – dasblinkenlight

Trả lời

9

Nếu tập tin CSV của bạn đến từ một hệ thống phi UNIX, nó có thể chứa nhiều dải phân cách dòng (ví dụ \r\n thay vì \n). Trong trường hợp này, componentsSeparatedByCharactersInSet sẽ chèn chuỗi trống cho chuỗi ký tự rỗng giữa \r\n.

Bạn có thể loại bỏ chuỗi rỗng từ NSArray sử dụng phương pháp này:

tableRows = [tableRows filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 
+0

Ah OK, cảm ơn lời giải thích, điều đó có ý nghĩa. Tệp CSV và tệp TXT cụ thể này được tạo từ một bảng đơn giản sử dụng Số của Apple. Tôi đã cố gắng tìm một cái gì đó để hiển thị cho tôi các thẻ định dạng trong tệp để không có kết quả. Và cảm ơn cho các vị từ tip quá, mà sẽ có ích. –

+0

Awesome 1-liner để thực hiện cuộc gọi phương thức của Apple hoạt động theo cách bạn cần đến 90% thời gian, cảm ơn. – Adam

+0

Tôi nghĩ rằng toàn bộ lý do để sử dụng newLineCharacterSet là để tất cả các dòng kết thúc đã được xử lý (cửa sổ, di sản táo, linux và intel mac) ?? Nếu bạn biết dữ liệu của bạn là độc quyền cho một hệ điều hành, thì bạn chỉ có thể sử dụng characterSetWithCharactersInString: @ "\ n" – Miek

1

để giải quyết vấn đề này, tôi đã sử dụng cách khác:

NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]] 

Vì vậy, bạn sẽ không cần phải loại bỏ bất kỳ dòng.

Các vấn đề liên quan