Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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 计算CSV文件中未加载到内存的行数_Objective C_C_Parsing_Csv_File Io - Fatal编程技术网

Objective c 计算CSV文件中未加载到内存的行数

Objective c 计算CSV文件中未加载到内存的行数,objective-c,c,parsing,csv,file-io,Objective C,C,Parsing,Csv,File Io,我有一个非常大的CSV文件,大约50k+行。我使用CHCSVParser逐行解析它,效果很好 当数据被解析并添加到CoreData中时,我想向用户显示某种类型的进度。如果我知道行数,我可以只显示numLinesParsed/totalines。我想知道是否有一种快速方法可以计算CSV文件中的行数,而无需: 将其全部加载到内存中 需要几秒钟以上的时间 我不知道我是否应该尝试做这个目标C,或者直接做C会更好 为什么不获取字节数,然后除以每行的字符数(如果每行的字符数相同),或者除以已处理的字符数以获

我有一个非常大的CSV文件,大约50k+行。我使用CHCSVParser逐行解析它,效果很好

当数据被解析并添加到CoreData中时,我想向用户显示某种类型的进度。如果我知道行数,我可以只显示numLinesParsed/totalines。我想知道是否有一种快速方法可以计算CSV文件中的行数,而无需:

  • 将其全部加载到内存中
  • 需要几秒钟以上的时间
  • 我不知道我是否应该尝试做这个目标C,或者直接做C会更好

    为什么不获取字节数,然后除以每行的字符数(如果每行的字符数相同),或者除以已处理的字符数以获得百分比


    ups:Jorge Nunez说它已经…

    我不认为C有办法在不将文件加载到内存的情况下获得行数,因为这似乎是一个操作系统级的函数,至少对我来说是这样的

    如果您在UNIX计算机上,则可以使用“wc”命令获取任何文件的行数。您应该能够通过'system'命令使用C运行该命令,并将输出重定向到一个临时文件,然后您可以非常快速地访问该文件并从那里解析行数


    如果您使用的是Windows,则可以使用findstr命令'findstr/R/N“^”file.txt“获取行数。注意,这将以冒号打印行,然后打印文件中的所有行。我相信你可以把这个输出削减一点,但我不知道如何从头开始就做到这一点。

    分批读取文件怎么样?@AnoopVaidya它似乎效率低下,因为如果我分批读取它,我还不如解析它。我不知道是否有什么超级秘密的方法可以只做“file.numberOfLines”之类的事情。你可以一直使用(bytes\u processed/size\u of\u file)*100,也许不是你想要的,但至少用户知道需要多长时间。你可以通过文件查找,检查nsfilehandler/nsfilemanagerFYI,对于C标准来说,文件只是一个字节序列。它不“知道”这些字节中有多少是换行符,除非您查看它们。因此,您唯一的希望是,如果iOS保留某种额外的文件元数据,可能包括作为内容摘要一部分的换行符数量。我对iOS的了解还不足以排除这种可能性,但似乎不太可能。另外请注意,您可能可以在不到“几秒钟”的时间内读取文件并扫描其换行符,但这取决于行的长度。如果没有其他关于如何完成此操作的建议,我将不得不执行此操作。我不知道如何从文件中获取指定字符的实际数量,没有读取整个文件。(可能是某些硬件解决方案,但是…)即使是linux上的“wc”也会读取整个文件。不幸的是,我需要在iOS上执行此操作。啊,我明白了。我没有查CHCSVParser是什么,我以为它只是其他第三方工具。是的,使用操作系统级的方法可能是不可能的。