How to read a file and write into a text file?

前端 未结 4 1780
悲哀的现实
悲哀的现实 2020-12-17 21:01

I want to open mis file, copy all the data and write into a text file.

My mis file.

File name – 1.mis

M3;3395;44;0;1;;20090404;094144;8193;3;         


        
相关标签:
4条回答
  • 2020-12-17 21:17
        An example of reading a file:
    Dim sFileText as String
    Dim iFileNo as Integer
    iFileNo = FreeFile
    'open the file for reading
    Open "C:\Test.txt" For Input As #iFileNo
    'change this filename to an existing file! (or run the example below first)
    
    'read the file until we reach the end
    Do While Not EOF(iFileNo)
    Input #iFileNo, sFileText
    'show the text (you will probably want to replace this line as appropriate to your program!)
    MsgBox sFileText
    Loop
    
    'close the file (if you dont do this, you wont be able to open it again!)
    Close #iFileNo
    (note: an alternative to Input # is Line Input # , which reads whole lines).
    
    
    An example of writing a file:
    Dim sFileText as String
    Dim iFileNo as Integer
    iFileNo = FreeFile
    'open the file for writing
    Open "C:\Test.txt" For Output As #iFileNo
    'please note, if this file already exists it will be overwritten!
    
    'write some example text to the file
    Print #iFileNo, "first line of text"
    Print #iFileNo, " second line of text"
    Print #iFileNo, "" 'blank line
    Print #iFileNo, "some more text!"
    
    'close the file (if you dont do this, you wont be able to open it again!)
    Close #iFileNo
    

    From Here

    0 讨论(0)
  • 2020-12-17 21:18
    FileCopy "1.mis", "1.txt"
    
    0 讨论(0)
  • 2020-12-17 21:19

    It far easier to use the scripting runtime which is installed by default on Windows

    Just go project Reference and check Microsoft Scripting Runtime and click OK.

    Then you can use this code which is way better than the default file commands

    Dim FSO As FileSystemObject
    Dim TS As TextStream
    Dim TempS As String
    Dim Final As String
    Set FSO = New FileSystemObject
    Set TS = FSO.OpenTextFile("C:\Clients\Converter\Clockings.mis", ForReading)
    'Use this for reading everything in one shot
    Final = TS.ReadAll
    'OR use this if you need to process each line
    Do Until TS.AtEndOfStream
        TempS = TS.ReadLine
        Final = Final & TempS & vbCrLf
    Loop
    TS.Close
    
    Set TS = FSO.OpenTextFile("C:\Clients\Converter\2.txt", ForWriting, True)
        TS.Write Final
    TS.Close
    Set TS = Nothing
    Set FSO = Nothing
    

    As for what is wrong with your original code here you are reading each line of the text file.

    Input #iFileNo, sFileText
    

    Then here you write it out

    Write #iFileNo, sFileText
    

    sFileText is a string variable so what is happening is that each time you read, you just replace the content of sFileText with the content of the line you just read.

    So when you go to write it out, all you are writing is the last line you read, which is probably a blank line.

    Dim sFileText As String
    Dim sFinal as String
    Dim iFileNo As Integer
    iFileNo = FreeFile
    Open "C:\Clients\Converter\Clockings.mis" For Input As #iFileNo
    Do While Not EOF(iFileNo)
      Input #iFileNo, sFileText
    sFinal = sFinal & sFileText & vbCRLF
    Loop
    Close #iFileNo
    
    iFileNo = FreeFile 'Don't assume the last file number is free to use
    Open "C:\Clients\Converter\2.txt" For Output As #iFileNo
    Write #iFileNo, sFinal
    Close #iFileNo
    

    Note you don't need to do a loop to write. sFinal contains the complete text of the File ready to be written at one shot. Note that input reads a LINE at a time so each line appended to sFinal needs to have a CR and LF appended at the end to be written out correctly on a MS Windows system. Other operating system may just need a LF (Chr$(10)).

    If you need to process the incoming data then you need to do something like this.

    Dim sFileText As String
    Dim sFinal as String
    Dim vTemp as Variant
    Dim iFileNo As Integer
    Dim C as Collection
    Dim R as Collection
    Dim I as Long
    Set C = New Collection
    Set R = New Collection
    
    iFileNo = FreeFile
    Open "C:\Clients\Converter\Clockings.mis" For Input As #iFileNo
    Do While Not EOF(iFileNo)
      Input #iFileNo, sFileText
      C.Add sFileText
    Loop
    Close #iFileNo
    
    For Each vTemp in C
         Process vTemp
    Next sTemp
    
    iFileNo = FreeFile
    Open "C:\Clients\Converter\2.txt" For Output As #iFileNo
    For Each vTemp in R
       Write #iFileNo, vTemp & vbCRLF
    Next sTemp
    Close #iFileNo
    
    0 讨论(0)
  • 2020-12-17 21:22

    If you want to do it line by line:

    Dim sFileText As String
    Dim iInputFile As Integer, iOutputFile as integer
    
    iInputFile = FreeFile
    Open "C:\Clients\Converter\Clockings.mis" For Input As #iInputFile 
    iOutputFile = FreeFile
    Open "C:\Clients\Converter\2.txt" For Output As #iOutputFile 
    Do While Not EOF(iInputFile)
       Line Input #iInputFile , sFileText
       ' sFileTextis a single line of the original file
       ' you can append anything to it before writing to the other file
       Print #iOutputFile, sFileText 
    Loop
    Close #iInputFile 
    Close #iOutputFile 
    
    0 讨论(0)
提交回复
热议问题