2014-02-19 4 views
0

Я застрял в данный момент с этой проблемой ... У меня есть следующий формат текстового файла (из письма и должен автоматически считываться в excel каждую неделю).Прочитайте текстовый файл по строке и сохраните определенные значения в массиве

TextTextText 
Text 
TextText 
TextTextText 

2/2 2/3 2/4 2/5 2/6 
63 61 65 67 62 
59 51 45 11 20 

11 22 41 32 55 

TextTextText 
Text 
TextText 
TextTextText 

И я ТОЛЬКО нужен в основном последний столбец данных. Таким образом, данные для 2/6. Теперь, как я могу это извлечь? Сплит не работает для рядов чисел, так как они имеют разные промежутки между ними (2 между первым 2, 3 после). Текст в начале может иметь разную длину. Однако всегда есть! 35 строк данных.

Мои вопросы в основном: 1. Как бы вы узнали, что это строка данных или нет? 2. Как вы правильно разделили строки данных?

Это то, что у меня до сих пор ...

Sub ReadFile() 
    Dim FSO As FileSystemObject 
    Dim FSOFile As File 
    Dim FSOStream As TextStream 

    Dim aintData(35, 1) As Integer 

    Set FSO = New FileSystemObject 
    Set FSOFile = FSO.GetFile("C:\users\mp\Desktop\Test.txt") 
    Set FSOStream = FSOFile.OpenAsTextStream(ForReading, TristateUseDefault) 
    Do While Not FSOStream.AtEndOfStream 
     Debug.Print FSOStream.ReadLine 
    Loop 

End Sub 
+0

Вы можете использовать функцию замены для замены пространства на, например, «#», а затем используйте split и trim. – CRondao

ответ

0

Дайте это попробовать:

Sub tgr() 

    Dim oFSO As Object 
    Dim varText As Variant 
    Dim arrText() As String 
    Dim strLine As String 
    Dim strResult As String 
    Dim strFilePath As String 

    strFilePath = Application.GetOpenFilename("Text Files, *.txt") 
    If strFilePath = "False" Then Exit Sub 'Pressed cancel 

    Set oFSO = CreateObject("Scripting.FileSystemObject") 
    arrText = Split(oFSO.OpenTextFile(strFilePath).ReadAll, vbCrLf) 

    For Each varText In arrText 
     strLine = Application.Trim(varText) 
     If IsNumeric(Left(strLine, 1)) Then strResult = strResult & vbCrLf & Trim(Right(Replace(strLine, " ", String(255, " ")), 255)) 
    Next varText 

    If Len(strResult) > 0 Then 
     strResult = Mid(strResult, Len(vbCrLf) + 1) 

     'At this point strResult contains the data you want 
     'I have used a MsgBox to verify 
     'However, you could output the data in any way you see fit 
     MsgBox strResult 

     'To put the result in an array, simply re-purpose arrText: 
     arrText = Split(strResult, vbCrLf) 
     MsgBox Join(arrText, vbCrLf) 'Again, I used a MsgBox to test its output 
    Else 
     MsgBox "No data found" 
    End If 

End Sub 
Смежные вопросы