powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Парсинг txt
7 сообщений из 7, страница 1 из 1
Парсинг txt
    #37400277
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется txt файл. Который состоит из шапки (первая строка) и данных (со второй строки и до N).
Шапка имеет следующий вид :

<PLPOR_DOC ><PLPOR_NO ><PLPOR_D_DOC ><PLPOR_P_T ><PLPOR_SMS >END_HEAD

Длина между тегами "<" ">" - это и есть длина поля.

Как распарсить 1.txt? чтобы каждое поле было в отдельной колонке?
...
Рейтинг: 0 / 0
Парсинг txt
    #37400278
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Парсинг txt
    #37400296
andMegaM,

Данные - мпорт внешних данных - Импортровать данные...
...
Рейтинг: 0 / 0
Парсинг txt
    #37400312
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что -то не пойму как импорт делается.
И мне нужно импортировать в макросе
...
Рейтинг: 0 / 0
Парсинг txt
    #37400359
andMegaM,
первый этап импотра записаный макрорекодером
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 17.08.2011 (***)
'

'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\download\1.txt", _
        Destination:=Range("A1"))
        .Name = "1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod =  0 
        .TextFilePromptOnRefresh = False
        .TextFilePlatform =  1251 
        .TextFileStartRow =  1 
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array( 1 ,  1 ,  4 ,  1 ,  2 ,  9 )
        .TextFileFixedColumnWidths = Array( 16 ,  11 ,  16 ,  16 ,  21 )
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Включал в себя выбор файла вручную
Результат
ABCDE1<PLPOR_DOC ><PLPOR_NO ><PLPOR_D_DOC > <PLPOR_P_T ><PLPOR_SMS >2БЕЗН_ПЛ_ПОРУЧ10110.07.2007электронно8244.543БЕЗН_ПЛ_ПОРУЧ10210.07.2007электронно10200.004БЕЗН_ПЛ_ПОРУЧ10310.07.2007электронно925.865БЕЗН_ПЛ_ПОРУЧ10410.07.2007электронно107.806БЕЗН_ПЛ_ПОРУЧ10510.07.2007электронно185.467БЕЗН_ПЛ_ПОРУЧ10610.07.2007электронно24.148БЕЗН_МЕМО_ОРД10710.07.2007электронно1.109БЕЗН_ПЛ_ПОРУЧ10810.07.2007электронно1.10

Дальше - "напильником"
...
Рейтинг: 0 / 0
Парсинг txt
    #37400367
... "напильником":
-в именах полей удалил < и >
-в поле PLPOR_SMS поменял точку на запятую и изменил
формат поля на "числовой" с соответствующим форматированием
...
Рейтинг: 0 / 0
Парсинг txt
    #37400550
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал вот так, без напильника :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Sub parsing()

Dim head As String          ' Строка заголовок
Dim pos_number As Integer   '
Dim len_head_end As Integer ' Длина строки заголовка
Dim f_number As Integer     ' Номер поля
Dim record_count As Long    ' Количество строк, которое нужно распарсить

Dim w1 As Worksheet
Dim w2 As Worksheet
Dim w3 As Worksheet


' Добавим пару листов
myWorksheetName = "Парсинг строк"
Sheets.Add.Name = myWorksheetName
Sheets(myWorksheetName).Move After:=Sheets(Sheets.Count)

myWorksheetName = "Поля и их длина"
Sheets.Add.Name = myWorksheetName
Sheets(myWorksheetName).Move After:=Sheets(Sheets.Count)

Set w1 = Sheets( 1 )
Set w2 = Sheets( 2 )
Set w3 = Sheets( 3 )

'Необходимые данные
head = w1.Cells( 1 ,  1 ).Value
len_head_end = InStrRev(head, ">")
record_count = w1.UsedRange.Row -  1  + w1.UsedRange.Rows.Count

mid_begin =  1 
mid_end =  0 
f_number =  0 
pos_number =  0 

'Цикл по заголовку
For i =  1  To len_head_end
  
  pos_number = InStr(i, head, ">")
  f_number = f_number +  1 
  
  mid_end = pos_number - mid_begin
  
  If i <= len_head_end Then
      
      ' Цикл позаписям
      For j =  1  To record_count
        w2.Cells(j, f_number).Value = Replace(Trim(Mid(w1.Cells(j,  1 ).Value, mid_begin, mid_end)), "<", "")
      Next j

      w3.Cells(f_number,  1 ).Value = Replace(Trim(Mid(head, mid_begin, mid_end)), "<", "")
      w3.Cells(f_number,  2 ).Value = mid_end
    
  End If
    
    i = pos_number +  1 
    mid_begin = i
Next i



End Sub
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Парсинг txt
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]