пытается сохранить строки текстового файла в VBA - PullRequest
0 голосов
/ 27 апреля 2011

Привет, я надеюсь на помощь в выяснении, как сохранить каждую строку текстового файла, считанного в программу VBA, в виде строки.Я хочу изменить одну из строк, а затем соединить их все вместе, но не знаю, как правильно читать текстовый файл и сохранять каждую строку в виде отдельной переменной.Спасибо за любую помощь, вы можете предоставить!

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Если вы не хотите добавлять ссылки, вы можете просто перейти с прямым кодом VBA.

Возьмем, к примеру, следующий файл wordlist.txt :

realize
empty
theorize
line
socialize
here
analyze

В следующем коде используются два метода, как вы описали (один более распространенный, чем другой):

Option Explicit

Sub main()
    Dim sFileName As String
    Dim sMergedLineArray() As String
    Dim sTextToFind As String
    Dim sReplacementText As String
    Dim sOutputFile As String
    Const MY_DELIMITER = "|"

    sFileName = "C:\deleteme\wordlist.txt"

    sMergedLineArray = ReadFileIntoArray(sFileName)

    sTextToFind = "ze"
    sReplacementText = "se"

    'Loop through each value in the array and make a change if you need to
    Dim x As Integer
    For x = 0 To UBound(sMergedLineArray)
        If InStr(1, sMergedLineArray(x), sTextToFind, vbTextCompare) > 0 Then
            sMergedLineArray(x) = Replace(sMergedLineArray(x), sTextToFind, sReplacementText, 1, -1, vbTextCompare)
        End If
    Next x

    sOutputFile = "C:\deleteme\UK_Version.txt"
    If Not SpitFileOut(sOutputFile, sMergedLineArray) Then
        MsgBox "It didn't work :("
    End If


    'OR...put it all together, make a mass change and split it back out (this seems unlikely, but throwing it in there anyway)
    sTextToFind = "se"
    sReplacementText = "ze"
    Dim sBigString As String
    Dim sNewArray As Variant
    sBigString = Join(sMergedLineArray, MY_DELIMITER)
    sBigString = Replace(sBigString, sTextToFind, sReplacementText, 1, -1, vbTextCompare)

    sNewArray = Split(sBigString, MY_DELIMITER, -1, vbTextCompare)

    sOutputFile = "C:\deleteme\American_Version.txt"
    If Not SpitFileOut(sOutputFile, sNewArray) Then
        MsgBox "It didn't work"
    End If

    MsgBox "Finished!"

End Sub


Function ReadFileIntoArray(sFileName As String) As String()
    Dim sText As String
    Dim sLocalArray() As String
    Dim iFileNum As Integer
    Dim iLineCount As Integer

    iFileNum = FreeFile

    Open sFileName For Input As #iFileNum
    Do Until EOF(iFileNum)
        Input #iFileNum, sText
        ReDim Preserve sLocalArray(iLineCount)
        sLocalArray(iLineCount) = sText
        iLineCount = iLineCount + 1
    Loop

    Close #iFileNum

    ReadFileIntoArray = sLocalArray


End Function


Function SpitFileOut(sFileName As String, sMyArray As Variant) As Boolean
    Dim iFileNum As Integer
    Dim iCounter As Integer

    SpitFileOut = False

    iFileNum = FreeFile

    Open sFileName For Output As #iFileNum
        For iCounter = 0 To UBound(sMyArray)
            Print #iFileNum, sMyArray(iCounter)
        Next
    Close #iFileNum


    SpitFileOut = True
End Function

Если вы запустите основной саб, у вас получится два файла:

  • UK_Version.txt : Это результат первого метода
  • American_Version.txt : Это результат второго

Есть первый урок VBA, молодой падаван; впитайте это, изучите и измените свое имя пользователя: P

1 голос
/ 27 апреля 2011

Просмотрите FileSystemObject (ref: 1 , 2 , 3 )

Вы должны перейти в меню и включить Microsoft Scripting Runtime и создайте глобальную переменную Global fso as New FileSystemObject.Теперь в любом месте вашего кода делайте такие вещи, как fso.OpenTextFile(), который возвращает TextStream.Каждый TextStream имеет методы loke ReadLine(), ReadAll(), SkipLine(), WriteLine() и т. Д. *

VBA References

Вот краткий пример кода.

Sub TEST()
    Dim ts As TextStream
    Set ts = fso.OpenTextFile("text_file.txt", ForReading, False)
    Dim s As String
    s = ts.ReadAll()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...