Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在Objective C中合并多个具有不同头平铺的csv文件_Objective C_Macos_Merge_Nsarray_Export To Csv - Fatal编程技术网

Objective c 在Objective C中合并多个具有不同头平铺的csv文件

Objective c 在Objective C中合并多个具有不同头平铺的csv文件,objective-c,macos,merge,nsarray,export-to-csv,Objective C,Macos,Merge,Nsarray,Export To Csv,我有多个csv文件和不同的标题磁贴,我想合并所有它们&保持组合标题。 我想我可以做覆盖csv到阵列,然后比较所有文件中的标题磁贴,然后合并csv文件。然而,似乎它得到了巨大的处理时间,因为那里有很多循环。如果有什么快速的解决方案,你能帮忙吗 例如: file1.csv No,Series,Product,A,B,C,D,E 1, AAA, XX, a1,b1,c1,d1,e1 文件2.csv No,Series,Product,A,C,D,B,E,F,G 1, AAB, XX,

我有多个csv文件和不同的标题磁贴,我想合并所有它们&保持组合标题。 我想我可以做覆盖csv到阵列,然后比较所有文件中的标题磁贴,然后合并csv文件。然而,似乎它得到了巨大的处理时间,因为那里有很多循环。如果有什么快速的解决方案,你能帮忙吗

例如:

file1.csv

No,Series,Product,A,B,C,D,E
1,  AAA,  XX,     a1,b1,c1,d1,e1
文件2.csv

No,Series,Product,A,C,D,B,E,F,G
1,  AAB,  XX,     a1,c1,d1,b1,e1,f1,g1
文件3.csv

No,Series,Product,A,A1,A2,C,D,B1,B,E
1,  AAC,  XX,     a1,a11,a21,c1,d1,b11,b1,e1
我的预期合并文件是: merge.csv

No,Series,Product,A,A1,A2,B,B1,C,D,E,F,G
1,  AAA,  XX,     a1,0,0,b1,0,c1,d1
1,  AAB,  XX,     a1,0,0,b1,0,c1,d1,e1,f1,g1
1,  AAC,  XX,     a1,a11,a21,b1,b11,c1,d1,e1

列中不可用的数据将显示为“0”或“NA”“,等等。

从你的评论来看,你似乎没有代码,但你认为你的草图会很慢,听起来你是在过早地优化——对你的算法进行编码,测试它,如果它使用的工具很慢,看看时间花在哪里,然后再看优化

也就是说,有一些建议:

  • 您需要决定是否支持常规CSV文件,其中字段值可能包含逗号、换行符或双引号;或简单的CSV文件,其中字段中不存在这些字符。请参阅第2节“需要解析什么以支持常规CSV文件”,并记住需要使用相同的约定输出值。如果您坚持使用简单的CSV文件,那么您可能只需要分别解析和输出
    NSString
    NSArray
    组件

  • 考虑首先在文件上迭代,只读取标题行,解析这些行,并生成合并的标题列表。您将需要保留标题的顺序,以便可以将它们与数据行配对,因此数组是您在此选择的容器。您可以选择在合并过程中使用集合,但最终合并的标题列表也应该是一个数组,按照您希望它们在合并文件中出现的顺序排列。您可以在下面的字典方法中直接使用这些标题数组

  • 使用大纲中的词典是一种方法。在本例中,请查看
    NSDictionary
    dictionaryWithObjects:forKeys:
    ,以从解析的头和记录构建字典。要输出字典,请查看
    objectsForKeys:notFoundMarker:
    并使用合并的标题列表。这支持缺少的键,您可以提供要插入的值。对于标准CSV,缺少的值为空(即文本中两个相邻的逗号),但您可以按照建议使用
    NA
    0

  • 您可以依次处理每个文件,一次处理一行:读取、解析、生成字典、从字典中获取一个值数组,并在适当的位置保留缺失的值、合并、写入。任何时候都不需要在内存中保存完整的文件

如果在使用字典轻松处理缺少的列实现代码后,您发现它太慢,那么可以考虑优化。您可能需要考虑,而不是将每个输入数据行拆分为字段,并重新组合在缺少的列中,您只需在数据行的文本上直接进行字符串替换操作,并且只需根据需要添加额外的分隔符,例如,如果缺少列四,则可以更改第三逗号来插入两个逗号。缺少列

如果在设计算法并编写代码后遇到问题,您可以提出一个新问题,包括您的算法和代码,一个指向此问题的链接,以便人们可以跟踪历史并解释您的问题。毫无疑问,有人会帮助你迈出下一步


HTH

从您的评论来看,您似乎没有代码,但您认为您的草图速度会很慢,听起来您是在过早地优化算法-编写算法代码,测试算法,如果算法速度慢,请使用
仪器查看时间花在哪里,然后查看优化

也就是说,有一些建议:

  • 您需要决定是否支持常规CSV文件,其中字段值可能包含逗号、换行符或双引号;或简单的CSV文件,其中字段中不存在这些字符。请参阅第2节“需要解析什么以支持常规CSV文件”,并记住需要使用相同的约定输出值。如果您坚持使用简单的CSV文件,那么您可能只需要分别解析和输出
    NSString
    NSArray
    组件

  • 考虑首先在文件上迭代,只读取标题行,解析这些行,并生成合并的标题列表。您将需要保留标题的顺序,以便可以将它们与数据行配对,因此数组是您在此选择的容器。您可以选择在合并过程中使用集合,但最终合并的标题列表也应该是一个数组,按照您希望它们在合并文件中出现的顺序排列。您可以在下面的字典方法中直接使用这些标题数组

  • 使用大纲中的词典是一种方法。在本例中,请查看
    NSDictionary
    dictionaryWithObjects:forKeys:
    ,以从解析的头和记录构建字典。要输出字典,请查看
    objectsForKeys:notFoundMarker:
    并使用合并的标题列表。这支持缺少的键,您可以提供要插入的值。对于标准CSV,缺少的值为空(即文本中两个相邻的逗号),但您可以按照建议使用
    NA
    0

  • 您可以依次处理每个文件,一次处理一行:读取、解析、生成字典、从字典中获取一个值数组,并在适当的位置保留缺失的值、合并、写入。任何时候都不需要在内存中保存完整的文件

如果在使用字典实现代码后