2011-01-05 18 views
1

Ich bin neu in VBScript und ich habe Probleme mit etwas, das relativ einfach sein sollte. Ich habe zwei sehr große Textdateien, die ich basierend auf bestimmten Zeilen in den Dateien in viele verschiedene Textdateien aufteilen muss. Hier ist ein Beispiel der Textdatei:VBScript, um sehr große Textdateien zu teilen

F1 SA1056-540X0 
F21 All_Tools 
F3 123229 99819 30MIL 
F3 317229 99819 30MIL 
F5 0 0 
F51 0 0 
F6 136103 204045 
F7 0 0 
F8 265094 249728 90000 1 N N 455229 
F9 C1A 
F8 265094 208328 90000 1 N N 455229 
F9 C1B 
F12 0.125000 250 0 
F1 SA1056-550X1 
F21 All_Tools 
F3 123229 99819 30MIL 
F3 317229 99819 30MIL 
F5 0 0 
F51 0 0 
F6 136103 204045 
F7 0 0 
F8 265094 249728 90000 1 N N 455229 
F9 C1A 
F8 265094 208328 90000 1 N N 455229 
F9 C1B 
F12 0.125000 250 0 

Die F1-Linie wird den Namen der neuen Textdatei zur Verfügung stellen, während die F12 Zeile die letzte Zeile in der neuen Textdatei sein. Das nächste F1 wird die nächste Datei sein und so weiter. Hier ist mein Code. Läuft die ReadLine-Methode nicht in die nächste Zeile?

Dim fso, newFile, folderPath 

folderPath = "C:\MyDataTest" 

Set fso = CreateObject("Scripting.FileSystemObject") 

For Each file In fso.GetFolder(folderPath).Files 

    Do While Not file.OpenAsTextStream.AtEndOfStream 
     strLine = file.OpenAsTextStream.ReadLine 
     strChar = file.OpenAsTextStream.Read(3) 
     Do While strChar <> "F12" 
      If strChar = "F1 " Then 
       fileName = Replace(strLine, "F1 ", "") 
       newFilePath = folderPath + "\" + fileName + ".txt" 
       Set newFile = fso.CreateTextFile(newFilePath, True) 
       newFile.WriteLine(strLine) 
       strLine = file.OpenAsTextStream.ReadLine 
       strChar = file.OpenAsTextStream.Read(3) 
      Else 
       newFile.WriteLine(strLine) 
       strLine = file.OpenAsTextStream.ReadLine 
       strChar = file.OpenAsTextStream.Read(3) 
      End If 
     Loop 
     newFile.WriteLine(strLine) 
     newFile.Close 
    loop 

Next  

Dies erstellt die Datei und schreibt das erste F1 Linie und dann erhalte ich eine Berechtigung verweigert Laufzeitfehler auf dem „Set newFile = fso.CreateTextFile (newFilePath, True)“ Zeile. Ich bin mir sicher, dass mir ein einfacherer Weg fehlt.

Vielen Dank!

Antwort

1

Ich konnte es herausfinden. Hier ist der Code für alle, die interessiert sind:

Dim fso, fs, newFile, folderPath 

folderPath = "C:\MyDataTest" 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set fs = CreateObject("Scripting.FileSystemObject") 


For Each file In fso.GetFolder(folderPath).Files 
    Set fileSplit = fso.OpenTextFile(file) 
    Do While Not fileSplit.AtEndOfStream 
     strLine = fileSplit.ReadLine 
     testStr = Left(strLine, 3) 
     If Left(strLine, 3) <> "F12" Then 
      If Left(strLine, 3) = "F1 " Then 
       fileName = Replace(strLine, "F1 ", "") 
       newFilePath = (folderPath + "\" + fileName + ".txt") 
       Set newFile = fs.CreateTextFile(newFilePath, True) 
       newFile.WriteLine(strLine) 
      Else 
       newFile.WriteLine(strLine) 
      End If 
     Else 
      newFile.WriteLine(strLine) 
      newFile.Close 
     End If 

    loop 
    fileSplit.Close 
Next  
Verwandte Themen