【问题标题】:Write a variable to a file that has a different type than the function assigned to the variable将变量写入与分配给变量的函数具有不同类型的文件
【发布时间】:2011-11-19 11:09:58
【问题描述】:

我有以下用于解析测试文件的代码。当我分配 file = Read() 时,在 Sub Main() 中出现变量转换错误。 Read() 的返回值是一个 TextFieldParser 类型。如何将正确的变量类型分配给“文件”,以便将输出写入文本文件?

谢谢!

模块模块1

Function Read()
    Using MyReader As New FileIO.TextFieldParser("C:\Users\Colin\Desktop\Parse_Me.txt")
        Dim currentRow As String
        While Not MyReader.EndOfData
            Try
                currentRow = MyReader.ReadLine()
                Console.WriteLine(Parse_me(currentRow))
            Catch ex As FileIO.MalformedLineException
                MsgBox("Line " & ex.Message &
                       " is invalid. Skipping")
            End Try
        End While
        Return MyReader
        MyReader.Close()
    End Using
End Function

Function Parse_me(ByVal test As String)
    Dim Set_1, Set_2, Set_3, Set_4, Set_5 As String
    Dim new_string As String
    Set_1 = test.Substring(0, 4)
    Set_2 = test.Substring(7, 2)
    Set_3 = test.Substring(11, 1)
    Set_4 = test.Substring(14, 4)
    Set_5 = test.Substring(20, 4)
    new_string = Set_1 & " " & Set_2 & " " & Set_3 & " " & Set_4 & " " & Set_5
    Return new_string
End Function


Sub Main()
    Dim file As Object
    file = Read()
    FilePutObject("C:\Users\Colin\Desktop\Parse_Meoutput.txt", file)
End Sub

结束模块

【问题讨论】:

  • Dim file As FileIO.TextFieldParser?除非有一些我不知道的疯狂 VB 规则?
  • 我试过了,但仍然出现错误。从字符串“C:\Users\Colin\Desktop\Parse_Meo”到类型“Integer”的转换无效。
  • 问题是FilePutObject 需要一个整数作为第一个参数,而您传递的是一个字符串。

标签: vb.net file variables variable-assignment


【解决方案1】:

FilePutObject 应该如何工作(示例取自 FilePutObject 的 MSDN 文档):

Sub WriteData()
    Dim text As String = "test"
    FileOpen(1, "test.bin", OpenMode.Binary)
    FilePutObject(1, text)
    FileClose(1)
End Sub

1 充当文件的标识符。另请注意,文件名传递给FileOpen 之前 调用FilePutObject,然后调用FileClose。另请注意,正在将字符串写入文件。我不知道哪些类型的数据对于传递给FilePutObject 是有效的,但FileIO.TextFieldParser 绝对不是其中之一(我只是尝试过)。

如果我错了,请纠正我,但我很确定 FilePutObject 是 VB6 的遗留物之一。如果您正在编写新代码,我宁愿为我的 I/O 使用 Stream 对象。一方面,它更像是.Net-ish(即类型安全、面向对象等)。就可用性而言,Stream 的工作原理更加清晰,更不用说它不涉及将任意整数作为句柄传递给函数以识别您想要使用的文件。最重要的是,Stream 无论您是想写入文件、控制台还是将数据发送到另一台机器,都可以使用。总而言之,我肯定会查找 Stream 类,它的一些子类(如 FileStream,以及其他任何吸引你的东西),以及一些相关类型(如方便编写文本的 TextWriter 类)。

【讨论】:

    【解决方案2】:

    将函数“read”的定义改为:

    Function Read() as FileIO.TextFieldParser
    

    并将 sub main 中“文件”的声明更改为:

    Dim file as FileIO.TextFieldParser
    

    这样函数的数据类型和赋值匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      相关资源
      最近更新 更多