Что нового

[Данные, строки] Из в TXT файла в 2d массив

Houl777

Знающий
Сообщения
38
Репутация
5
Дано:

Текстовый файл с форматом строк:

0000 1111001F0 0021 ТК любой текст
0000 111100200 002A ТК любой текст
0000 111100220 002F ТК любой текст
0000 111100230 0025 ТК любой текст

Надо получить 2d массив в формате:

Col1 Col2
001F любой текст
0020 любой текст
0022 любой текст
0023 любой текст

Дополнительно: любой текст в DOS кодировке, числовые значения в HEX, но переводить из в DEC не надо
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <Array.au3>

$aRead = StringSplit(StringStripCR(FileRead("File.txt")), @LF)

Dim $a2DArray[$aRead[0]+1][2] = [[$aRead[0]]]

For $i = 1 To $aRead[0]
	$aLine = StringRegExp($aRead[$i], "^0000 1111([[:xdigit:]]{4}).*ТК (.*)$", 3)
	
	$a2DArray[$i][0] = $aLine[0]
	$a2DArray[$i][1] = $aLine[1]
Next

_ArrayDisplay($a2DArray)
 
Автор
H

Houl777

Знающий
Сообщения
38
Репутация
5
Спасибо работает. Разобрался как в 2d заводить.
Все еще могу подружиться с регулярными выражаниями.
Нужен паттерн для нижнего выражения.

0000 000C 1111000A0 03B70001 Любой текст
0000 000D 1111000B0 03B70002 Любой текст
0000 000E 1111000C0 03B70003 Любой текст
0000 000F 1111000D0 03B70004 Любой текст

Так же нужно получить 2d массив

Col1 Col2
000A любой текст
000B любой текст
000C любой текст
000D любой текст
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Houl777 [?]
Нужен паттерн для нижнего выражения.
Чуть по другому :
Код:
#include <Array.au3>
$sText=FileRead("File.txt")
ConsoleWrite ("$sText = " & $sText & @LF)

$aData=StringRegExp($sText, "1111(.+?)0\s.+?\s(.+)\r\n", 3)
_ArrayDisplay($aData)

Dim $a2DArray[(UBound($aData))/2][2] 

For $i = 0 To UBound($aData)-1 Step 2
	$a2DArray[$i/2][0] = $aData[$i]
    $a2DArray[$i/2][1] = $aData[$i+1]
Next

_ArrayDisplay( $a2DArray)

Здесь шаблон проверяется 1 раз для всего текста
 
Верх