Objective c 在Objective C中合并多个具有不同头平铺的csv文件
我有多个csv文件和不同的标题磁贴,我想合并所有它们&保持组合标题。 我想我可以做覆盖csv到阵列,然后比较所有文件中的标题磁贴,然后合并csv文件。然而,似乎它得到了巨大的处理时间,因为那里有很多循环。如果有什么快速的解决方案,你能帮忙吗 例如: file1.csvObjective 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,
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:
并使用合并的标题列表。这支持缺少的键,您可以提供要插入的值。对于标准CSV,缺少的值为空(即文本中两个相邻的逗号),但您可以按照建议使用objectsForKeys:notFoundMarker:
或NA
0
- 您可以依次处理每个文件,一次处理一行:读取、解析、生成字典、从字典中获取一个值数组,并在适当的位置保留缺失的值、合并、写入。任何时候都不需要在内存中保存完整的文件
HTH从您的评论来看,您似乎没有代码,但您认为您的草图速度会很慢,听起来您是在过早地优化算法-编写算法代码,测试算法,如果算法速度慢,请使用
仪器查看时间花在哪里,然后查看优化
也就是说,有一些建议:
- 您需要决定是否支持常规CSV文件,其中字段值可能包含逗号、换行符或双引号;或简单的CSV文件,其中字段中不存在这些字符。请参阅第2节“需要解析什么以支持常规CSV文件”,并记住需要使用相同的约定输出值。如果您坚持使用简单的CSV文件,那么您可能只需要分别解析和输出
NSString
和NSArray
的组件
- 考虑首先在文件上迭代,只读取标题行,解析这些行,并生成合并的标题列表。您将需要保留标题的顺序,以便可以将它们与数据行配对,因此数组是您在此选择的容器。您可以选择在合并过程中使用集合,但最终合并的标题列表也应该是一个数组,按照您希望它们在合并文件中出现的顺序排列。您可以在下面的字典方法中直接使用这些标题数组
- 使用大纲中的词典是一种方法。在本例中,请查看
NSDictionary
的dictionaryWithObjects:forKeys:
,以从解析的头和记录构建字典。要输出字典,请查看objectsForKeys:notFoundMarker:
并使用合并的标题列表。这支持缺少的键,您可以提供要插入的值。对于标准CSV,缺少的值为空(即文本中两个相邻的逗号),但您可以按照建议使用NA
或0
- 您可以依次处理每个文件,一次处理一行:读取、解析、生成字典、从字典中获取一个值数组,并在适当的位置保留缺失的值、合并、写入。任何时候都不需要在内存中保存完整的文件
如果在使用字典实现代码后