一次从文本文件中读取一个字符

时间:2017-05-19 14:22:02

标签: powershell

我试图根据它们的类型转换文本文件中的字符:

字母> →

数字> #

有没有办法按字符迭代文件?我目前唯一能让它工作的方法是嵌套循环遍历文件中的各个行。如果有一种更简单的方法,那就会削减很多我不得不趟过的代码。

3 个答案:

答案 0 :(得分:7)

  1. 您可以使用Get-Content -Encoding Byte并将字节值转换回字符:

    Get-Content foo.txt -Encoding Byte | foreach { [char]$_ }
    
  2. 您可以使用Get-Content -Raw并将结果转换为[byte[]]。不建议用于大文件。

  3. 上面的两个选项都会为您提供所有字符,包括换行符。由于显而易见的原因,选项1不适用于Unicode;选项2将。

    然后你已经提到了变体:迭代两次,一次一行一次,一次一个字符:

    Get-Content foo.txt | foreach { [char[]] $_ | foreach { ... } }
    

    如果您不需要换行符作为字符,我更喜欢这个版本,因为它应该具有合理的运行时和内存要求(例如,它不会尝试将整个文件放入内存中)。

答案 1 :(得分:3)

get-content myfile.txt | foreach { $_.ToCharArray() }

这会将文件内容展平为一长串字符。

答案 2 :(得分:0)

如果您正在处理非常大的文件,我发现的最快(编程)方法是使用.NET StreamReaderStreamWriter。利用这些对象,您可以一次读取一个字符串,执行操作,然后一次写入一个新文件。最后,删除原始文件并相应地重命名新文件。

如果您不需要以编程方式解决此问题并且可以使用正则表达式,我建议使用UltraEdit。我不知道他们使用了什么魔法,但读取文件的速度比我在PowerShell中设法要快得多。