为什么我在替换为�时会改变角色?

时间:2017-02-13 20:01:23

标签: vb.net unicode ascii

我有数百个文本文件,每个文件有数千条记录。见下面的样本记录。

  

3“100”56“2016-10-26 03:00:52.107”2016-10-26 07:00:52.000“1509”1“1509”17“1”-21749“-23437”0“2 “0” 0” 0” 0” 0” 0” 1” 1” 80.844208” 2” 1” 0.51136178” 3” 1” 0.4092806” 4” 1” 638” 5” 1” 0” 6” 1” 0” 7 “1” 7” 8” 1” 3” 9” 1” 914” 10” 的1” 984” 11” 的1” 1094” 12” 1” 817” 13” 的1” 1246” 14” 1” 583” 15” 1 “89” 16” 1” 233” 17” 1” 771” 18” 1” 405” 19” 的1” 245” 20” 1” 528” 21” 的1” 325” 的0” NULL” NULL” NULL” NULL” NULL “空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL” NULL “空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL” NULL “空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL” NULL NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL” NULL” NULL” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL”空” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL” NULL

这些是从SQL完成的导出,我没有设置。

我正在将NULL文本更改为"",以使其真正为NULL。一旦数据得到纠正,我就会运行批量插入。

以下是我的查找/替换代码的副本。

Dim fileReader As String = My.Computer.FileSystem.ReadAllText(LBRQFileName).Replace("NULL", "")
    My.Computer.FileSystem.WriteAllText(LBRQFileName, fileReader, False)

如果分隔符是' ,'此代码非常有用。或者' ;'或任何正常的。 但是,很多这些文件都有个字符(U + 201D:RIGHT DOUBLE QUOTATION MARK {双逗号引号})作为分隔符。在这种情况下,当我运行find并替换为NULL时,我最终得到类似这样的东西(小例子):

1�245�20�1�528�21�1�325�0�������������� 

(连续几次" Null"是值)

我尝试在该双引号上运行查找和替换,但只有相同的结果。我已经尝试过设置分隔符的方法作为右双引号(在SSMS中工作,但不是从VB工作)。

运行RIGHT DOUBLE QUOTATION MARK和" NULL"从记事本......工作正常.....

但我有数百个文件要做。我没有时间在记事本中打开每个人。

更新

将代码更改为以ASCII格式读写。在我运行替换代码后,我留下了一个可用的分隔符。

Dim fileReader As String = My.Computer.FileSystem.ReadAllText(LBRQFileName, Encoding.ASCII).Replace("NULL", "")
    My.Computer.FileSystem.WriteAllText(LBRQFileName, fileReader, False, System.Text.Encoding.ASCII)

2 个答案:

答案 0 :(得分:1)

可能因为这些是正确的引号引号......您需要更改文本文件编码

 Dim fileReader As String = My.Computer.FileSystem.ReadAllText(LBRQFileName, System.Text.Encoding.UTF8).Replace("NULL", "")

 My.Computer.FileSystem.WriteAllText(LBRQFileName, fileReader, False, System.Text.Encoding.UTF8)

默认的vb.net文本文件不支持该字符。

答案 1 :(得分:0)

使用System.IO库

可以实现相同的功能
    Using str As New IO.StreamReader("C:\1.txt", System.Text.Encoding.Unicode, True)

        strText = str.ReadToEnd.Replace("NULL", "")
        str.Close()

    End Using

    Using stw As New IO.StreamWriter("C:\1.txt", False, System.Text.Encoding.Unicode)

        stw.Write(strText)
        stw.Close()

    End Using

它适用于我

相关问题