Powershell:如果较大的CSV包含换行符,如何导入较大CSV的Csv部分?

3phpmpom  于 2022-12-06  发布在  Shell
关注(0)|答案(1)|浏览(167)

**更新:**感谢Keith-Miller在下面的建议,我能够使用StreamReader.ReadBlock()提取一个字符块,然后使用String.LastIndexOf()在该字符串中搜索最后一个行分隔符。幸运的是,在本例中,行分隔符是r`n`,而单元格中的换行符只有r`。由于another issue,我还没有找到该文件的最终解决方案,但一旦找到它,我将提供另一个更新!
原帖子:

假设我有一个如下所示的CSV:

ID   | Message
-----+------------------
1    | Buy milk
2    | Don't forget
     | to eat
     | candy
3    | Also pizza

或者,因为它会储存在文字档中:

ID,Message
1,"Buy milk"
2,"Don't forget
to eat
candy"
3,"Also pizza"

如果没有ID 3的记录,如何导入ID 1和2的记录?

  • Get-Content -Head需要知道每行中有多少个换行符。
  • StreamReader将返回类似to eat的行,同样需要了解每行中的换行符。
  • 从文件中去除换行符也会从行尾去除换行符,从而生成一行多列的表格。

对于其他上下文,我尝试分块导入此CSV *,因为 * 它太大了,因此如果有逐行读取(甚至一次多行)的解决方案,我将非常感激。与“导入巨大的CSV,然后取出所需的行”相反。

gupuwyp2

gupuwyp21#

对于其他上下文,我尝试分块导入这个CSV,因为它太大了,所以如果有一个逐行读取(甚至一次多行)的解决方案,我会非常感激。
Import-Csv * 已经像这样工作了 * --它将读取头(如果相关),然后开始逐行输出记录--它实际上不会等到整个文件导入后才吐出行数据。
因此,要获取前10行,只需执行以下操作:

Import-Csv path\to\file.csv |Select-Object -First 10

Select-Object将在收到前10个输入对象后立即中断Import-Csv,其余CSV行将保持“未读”状态

相关问题