Запишите переменную в файл, который имеет тип, отличный от функции, назначенной переменной - PullRequest
0 голосов
/ 18 сентября 2011

У меня есть следующий код, который я использую для анализа тестового файла. Я получаю ошибку преобразования переменной в Sub Main (), когда я назначаю file = Read (). Возвращаемое значение Read () является типом TextFieldParser. Как назначить правильный тип переменной для «file», чтобы я мог записать вывод в текстовый файл?

Спасибо!

Модуль Модуль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

Конечный модуль

Ответы [ 2 ]

1 голос
/ 18 сентября 2011

Вот как FilePutObject должен работать (пример взят из документации MSDN для FilePutObject):

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. Если вы пишете новый код, я бы предпочел использовать объект Stream для своего ввода / вывода. С одной стороны, это намного больше .Net-иш (то есть типобезопасный, объектно-ориентированный и т. Д.) А что касается удобства использования, то гораздо яснее работает поток, не говоря уже о том, что он не предусматривает передачу произвольных целых чисел в качестве дескрипторов функций, чтобы определить, с каким файлом вы хотели бы работать. И в довершение всего Stream работает независимо от того, хотите ли вы записать файл, консоль или отправить данные на другой компьютер. Подводя итог, я бы определенно нашел класс Stream, некоторые его дочерние классы (например, FileStream и все, что вам нравится) и некоторые связанные с ними типы (например, класс TextWriter для удобного написания текста). ).

0 голосов
/ 18 сентября 2011

Измените определение функции «чтение» на:

Function Read() as FileIO.TextFieldParser

и измените объявление "file" в sub main на:

Dim file as FileIO.TextFieldParser

Таким образом, тип данных функции и назначения совпадают.

...