Что нового

Вывод в масив из txt?

Nassz

Новичок
Сообщения
9
Репутация
0
есть файл вида
Юзер скачано получено
1 1024 128
хочу что б в масив его выводило не в общий а разделяло по столбцам , как такое сотворить ?
 

amel27

Продвинутый
Сообщения
146
Репутация
55
Код:
#include <array.au3>

$sFile = "c:\_\1.txt"
$sText = FileRead($sFile)
$aRExp = StringRegExp($sText, "(?m)^\s*([^\s]+)\s+([^\s]+)\s+([^\s]+)", 3)

If IsArray($aRExp) Then
   Dim $aFile[UBound($aRExp)/3][3]
   For $i=0 To UBound($aFile)-1
      $aFile[$i][0]=$aRExp[$i*3]
      $aFile[$i][1]=$aRExp[$i*3+1]
      $aFile[$i][2]=$aRExp[$i*3+2]
   Next
EndIf

_ArrayDisplay($aFile)
 
V

VitAl2013

Гость
А можно пояснить что там что?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Итак, файл p.txt:
Код:
Юзер скачано получено
1 1024 128
Парсер:
Код:
$src = FileRead("p.txt")
$lines = StringSplit($src,@CRLF,1)
$line = 1
For $i=1 To $lines[0] Step 1
	$lines[$i] = StringSplit($lines[$i]," ",1)
Next

Возвращает массив:
Код:
Array $lines:
{
	0 => 2 (кол-во строк)
	
    1 => Array $lines[0]
    {
        0 => 3 (кол-во столбцов)
		
		1 => Юзер
		
		2 => скачано
		
		3 => получено
    }
	
	2 => Array $lines[1]
    {
        0 => 3 (кол-во столбцов)
		
		1 => 1
		
		2 => 1024
		
		3 => 128
    }
}
Можно и так =)
 

amel27

Продвинутый
Сообщения
146
Репутация
55
VitAl2013 сказал(а):
А можно пояснить что там что?
Код:
#include <array.au3> ; необязательная строка - только для _ArrayDisplay()

; Считываем содержимое файла в переменную $sText
$sFile = "c:\_\1.txt"
$sText = FileRead($sFile)

; Построчный разбор текста регулярным выражением:
; найденные совпадения в скобках сохраняются в 1-мерный массив

; (?m)       модификатор, изменяющий действие "^" и "$"
; ^          начало строки
; \s*        необязательные пробелы в начале строки
; ([^\s]+)   подстрока из символов, не являющихся пропусками (1-е сохранение в массив)
; \s+        подстрока из 1 или более пропусков
; ([^\s]+)   подстрока из символов, не являющихся пропусками (2-е сохранение в массив)
; \s+        подстрока из 1 или более пропусков
; ([^\s]+)   подстрока из символов, не являющихся пропусками (3-е сохранение в массив)
; $          конец строки
$aRExp = StringRegExp($sText, "(?m)^\s*([^\s]+)\s+([^\s]+)\s+([^\s]+)", 3)

; Преобразование 1-мерного массива в 2-мерный
; $aRExp[N] --> $aFile[N/3][3]

If IsArray($aRExp) Then
   Dim $aFile[UBound($aRExp)/3][3]
   For $i=0 To UBound($aFile)-1
      $aFile[$i][0]=$aRExp[$i*3]
      $aFile[$i][1]=$aRExp[$i*3+1]
      $aFile[$i][2]=$aRExp[$i*3+2]
   Next
EndIf

_ArrayDisplay($aFile) ; Вывод на экран полученного массива



Добавлено:
Сообщение автоматически объединено:

Nik_rus сказал(а):
угу, только на выходе получаем массив массивов, одной командой прочитать значение элемента не получится
 
Автор
N

Nassz

Новичок
Сообщения
9
Репутация
0
последний то что нужно !!! Спасибо автору !!!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Если вопрос решен, не брезгуем отмечать тему таковой :whistle:
 
Верх