


GSerg писал(а):Потому что, наверное, понятие User Defined Types нам не знакомо?



batiq писал(а):VS0000AD075L7055EEWSDACTADPHM00009340A0 505-02-1005-02-10

Private Type DATA_STRUCTURE
    RecordName As String * 2
    TlcoCon As String * 4
    ExchangeID As String * 11
    SystemName As String * 4
    MeasurementName As String * 8
    JobNum As String * 8
    VersionN As String * 4
    BeginDate As String * 8
    EndDate As String * 8 
End Type
Dim mtVar4Read As DATA_STRUCTURE
Sedge писал(а):
- Код: Выделить всё
 ..
Dim mtVar4Read As DATA_STRUCTURE

Private Type DATA_STRUCTURE
    RecordName As String * 2
    TlcoCon As String * 4
    ExchangeID As String * 11
    SystemName As String * 4
    MeasurementName As String * 8
    JobNum As String * 8
    VersionN As String * 4
    BeginDate As String * 8
    EndDate As String * 8
End Type
Sub ReadTGRP()
Dim mtVar4Read As DATA_STRUCTURE
    
    Dim FileNum As Integer
    Dim txt As String
    Dim i As Integer
    FileNum = FreeFile
    i = 0
    fileToOpen = Application.GetOpenFileName("Text Files (*.txt), *.txt")
    If fileToOpen <> False Then
        Open fileToOpen For Input As FileNum
        Worksheets("Ëèñò1").Activate
        Cells.Select
        Cells.Clear
        Input #FileNum, mtVar4Read.RecordName, mtVar4Read.TlcoCon, mtVar4Read.ExchangeID, _
            mtVar4Read.SystemName, mtVar4Read.MeasurementName, mtVar4Read.JobNum, _
            mtVar4Read.VersionN, mtVar4Read.BeginDate, mtVar4Read.EndDate
        Do Until EOF(FileNum)
            Line Input #FileNum, txt
            Worksheets("Ëèñò1").Activate
            i = i + 1
            Range("A" + CStr(i)).Select
            ActiveCell = txt
        Loop
        Close #FileNum
    End If
End Sub


alibek писал(а):Open For Random As ... Len = Len(mtVar4Read)
Input #FileNum, mtVar4Read


alibek писал(а):Ты открываешь файл не для последовательного ввода/вывода..


alibek писал(а):Открывай, как Binary и пиши свой обработчик или класс.




Function ReadData(ByVal File As String, ByVal LineNumber As Long, ByRef Arguments() As String) As Boolean
Dim FN As Integer, C As Long, L As String
FN = FreeFile()
Open File For Input As #FN
Do While Not EOF(FN)
  Line Input #FN, L
  C = C + 1
  If C = LineNumber Then
    Select Case C
      Case 1
        Call Process1Line(L, Arguments)
      Case 2
        Call Process2Line(L, Arguments)
      Case Else
        Call ProcessRestLine(L, Arguments)
    End Select
    Exit Function
  End If
Loop
Close #FN
End Function
Sub Process1Line(ByVal LineString As String, Args() As String)
'         1         2         3         4         5
'123456789012345678901234567890123456789012345678901234567
'* *   *          *   *       *       *   *       *       
'VS0000AD075L7055EEWSDRECTGRP 00002529G03905-02-1005-02-10
'
Dim I As Long
ReDim Args(1 To 9)
Args(1) = Mid$(LineString, 1, 2)
Args(2) = Mid$(LineString, 3, 4)
Args(3) = Mid$(LineString, 7, 11)
Args(4) = Mid$(LineString, 18, 4)
Args(5) = Mid$(LineString, 22, 8)
Args(6) = Mid$(LineString, 30, 8)
Args(7) = Mid$(LineString, 38, 4)
Args(8) = Mid$(LineString, 42, 8)
Args(9) = Mid$(LineString, 50, 8)
End Sub
Sub Process2Line(ByVal LineString As String, Args() As String)
'         1         2         3         4         5         6         7         8         9        10        11        12
'1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901
'*   *  * *  * **    *       *                       *                                                         *          
2529 291G039 151D900 05-02-1000-00-0000-00-0000-00-0005-02-1000-00-00-0000-00-00-0000-00-00-0000-00-00-00000000TS.TGRP.TH1
'
Dim I As Long
ReDim Args(1 To 11)
Args(1) = Mid$(LineString, 1, 4)
Args(2) = Mid$(LineString, 5, 3)
Args(3) = Mid$(LineString, 8, 2)
Args(4) = Mid$(LineString, 10, 3)
Args(5) = Mid$(LineString, 13, 2)
Args(6) = Mid$(LineString, 15, 1)
Args(7) = Mid$(LineString, 16, 5)
Args(8) = Mid$(LineString, 21, 8)
Args(9) = Mid$(LineString, 29, 24)
Args(10) = Mid$(LineString, 53, 58)
Args(11) = Mid$(LineString, 111, 11)
End Sub
Sub ProcessRestLine(ByVal LineString As String, Args() As String)
' Здесь будет код, аналогичный предыдущим двум, только позиции столбцов другие.
End Sub

Dim A() As String
If ReadData("c:\file1", 4, A()) Then
  ' строка найдена, параметры в массиве A()
End If
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9