ios - .csv 文件的 NSMutableArray 的格式内容

标签 ios objective-c csv nsmutablearray uitextview

我有一个图片幻灯片应用程序,它允许用户对 3 张图片进行评分。评分存储在名为 ratedNSMutableArray 中,如下所示:

    2014-01-06 07:10:23.040 SlideShowSurvey[50425:70b] (
    1, <-- Rating for Picture 1
    2, <-- Rating for Picture 2
    3  <-- Rating for Picture 3
)

然后使用以下代码将其保存到 .csv 文件中:

-(void)saveRatings
{
    NSString *picRatings = [NSString stringWithFormat:@"%@, \n",self.rated];
    // Find documents directory
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *survey = [docPath stringByAppendingPathComponent:@"pictureRatings.csv"];
    // Create new file if none exists
    if (![[NSFileManager defaultManager] fileExistsAtPath:survey])
    {
        [[NSFileManager defaultManager] createFileAtPath:survey contents:nil attributes:nil];
    }
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:survey];
    [fileHandle seekToEndOfFile];
    [fileHandle writeData:[picRatings dataUsingEncoding:NSUTF8StringEncoding]];
    [fileHandle closeFile];
}

然后我可以将 .csv 文件的结果显示到 UITextView,尽管它会准确显示数组的结构。例如,多个结果显示为:

(
    1,
    2,
    3 
),
(
    1,
    2,
    3 
),
(
    1,
    2,
    3 
)

有没有一种方法可以格式化数组以便将其保存为 1,2,3?我可以添加像图 1、图 2、图 3 这样的列标题吗?例如,我想在 UITextView 上显示如下结果:

Picture 1, Picture 2, Picture 3
1,2,3
1,2,3
1,2,3

我试过搜索,但似乎找不到这个答案。任何帮助表示赞赏!谢谢。

编辑:感谢 jrturton 的解决方案,我使用以下代码解决了这个问题:

        // Set column titles for .csv
    NSArray *columnTitleArray = @[@"Picture 1", @"Picture 2", @"Picture 3"];

    NSString *columnTitle = [columnTitleArray componentsJoinedByString:@","];
    NSString *columnTitleToWrite = [columnTitle stringByAppendingString:@"\n"];

    // Separate ratings into cells
    NSString *picRatings = [rated componentsJoinedByString:@","];
    NSString *picRatingsToWrite = [picRatings stringByAppendingString:@"\n"];

    // Find documents directory
..

然后将此添加到方法中以确保仅在创建新文件时设置列标题:

    // Create new file if none exists
    if (![[NSFileManager defaultManager] fileExistsAtPath:survey])
    {
        [[NSFileManager defaultManager] createFileAtPath:survey contents:nil attributes:nil];

        // Set title for new file
        NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:survey];
        [fileHandle writeData:[columnTitleToWrite dataUsingEncoding:NSUTF8StringEncoding]];
    }
..

最佳答案

这里有一个更简单的方法:

NSMutableString *csv = [NSMutableString string];

NSString *label = ...;

[csv appendFormat:@"%@,\n", label];

NSNumber *keyNum = ...;

[csv appendFormat:@"%d,%d\n", [keyNum intValue], [countNum intValue]];

NSString *filename = @"counts.csv";

NSError *error; 

[csv writeToFile:filename atomically:YES encoding:NSUTF8StringEncoding error:&error];

关于ios - .csv 文件的 NSMutableArray 的格式内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20945062/

相关文章:

ios - 魔法记录排序错误

ios - 在 Swift 中使用 Comparable 扩展 @objc 协议(protocol)

objective-c - 使用 SpriteKit 在中间有较粗笔画的线条

objective-c - 如何像键盘一样呈现选择器 View ?

python - 从日志写入 csv 时替换字符串

ios - 无法在多点连接 iOS 10 中通过蓝牙连接

ios - GPUImageMovie 使用多个图像作为纹理和过程

objective-c - 追加 NSMutableArray

csv - Openoffice - CSV 导出 : is there a default escape-charcter?

javascript - 如何跳过 csv 中的标题并解析列?