Что нового

Формирование двумерного массива из файла

Nbv_tim

Новичок
Сообщения
47
Репутация
1
существует текстовый файл
macId=30
macName=Ger
mc=45
regUD=Ges34
regName=Город
и т.д.
Как сформировать двумерный массив
делаю
Код:
$w=FileRead(@ScriptDir & "\" & "Parce" & "\" & "fj.txt")
 $R=StringSplit($w,"=")
при этом в массив пишется только втроая часть после разделителя.
можно сразу писать две части справа и слева в двумерный массив?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если использовать "StringSplit" , то можно так :
Код:
#include <array.au3>

$w = FileReadToArray(@ScriptDir & "\" & "fj.txt")

Dim $aResult[0][2]
$n = 0
For $i = 0 To UBound($w) - 1
	If $w[$i] Then
		$aPart = StringSplit($w[$i], '=')
		If Not @error Then
			$n += 1
			ReDim $aResult[$n][2]
			$aResult[$n - 1][0] = $aPart[1]
			$aResult[$n - 1][1] = $aPart[2]
		EndIf
	EndIf
Next
_ArrayDisplay($aResult)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Если разделитель в каждой строке, то проще так
Код:
#include <File.au3>
Global $a
_FileReadToArray(@ScriptDir & "\Parce\fj.txt", $a, 0, "=")

#include <Array.au3>
_ArrayDisplay($a)
 
Автор
N

Nbv_tim

Новичок
Сообщения
47
Репутация
1
ra4o сказал(а):
Если использовать "StringSplit" , то можно так :
Код:
#include <array.au3>

$w = FileReadToArray(@ScriptDir & "\" & "fj.txt")

Dim $aResult[0][2]
$n = 0
For $i = 0 To UBound($w) - 1
	If $w[$i] Then
		$aPart = StringSplit($w[$i], '=')
		If Not @error Then
			$n += 1
			ReDim $aResult[$n][2]
			$aResult[$n - 1][0] = $aPart[1]
			$aResult[$n - 1][1] = $aPart[2]
		EndIf
	EndIf
Next
_ArrayDisplay($aResult)
Спасибо, немного поправил т.к. не работало.
Код:
#include <File.au3>
#include <Array.au3>
Global $w,$aResult

_FileReadToArray(@ScriptDir & "\" & "Parce" & "\" & "fj.txt",$w)

Dim $aResult[1][2]
$n = 0
For $i = 0 To UBound($w) - 1
    If $w[$i] Then
        $aPart = StringSplit($w[$i], '=')
        If Not @error Then
            $n += 1
            ReDim $aResult[$n][2]
            $aResult[$n - 1][0] = $aPart[1]
            $aResult[$n - 1][1] = $aPart[2]
        EndIf
    EndIf
Next
_ArrayDisplay($aResult)




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

InnI сказал(а):
Если разделитель в каждой строке, то проще так
Код:
#include <File.au3>
Global $a
_FileReadToArray(@ScriptDir & "\Parce\fj.txt", $a, 0, "=")

#include <Array.au3>
_ArrayDisplay($a)
ERROR: _FileReadToArray() called with wrong number of args.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Nbv_tim

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 
Автор
N

Nbv_tim

Новичок
Сообщения
47
Репутация
1
ra4o сказал(а):
Если использовать "StringSplit" , то можно так :
Код:
$aPart = StringSplit($w[$i], '=')
а как сделать так чтобы не вырезалась часть после первого символа =
то есть в одномерном массиве id=(gd=7777 в результатье прохода на двумерный массив получается
1 столбец id 2 столбец (gd ровно и цифры вырезаются
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Возможно красивее и лучше будет с регулярными выражениями, но я с ними не очень дружу.
Вот мой вариант без регулярных выражений:
Код:
#include <array.au3>

$w = FileReadToArray(@ScriptDir & "\fj.txt")

Dim $aResult[0][2]
$n = 0
For $i = 0 To UBound($w) - 1
	If $w[$i] Then
		$StringIndex = StringInStr($w[$i], '=')
		If $StringIndex Then
			$n += 1
			ReDim $aResult[$n][2]
			$aResult[$n - 1][0] = StringLeft($w[$i], $StringIndex - 1);Всё до первого знака "="
			$aResult[$n - 1][1] = StringTrimLeft($w[$i], $StringIndex);Всё после первого знака "="
		EndIf
	EndIf
Next
_ArrayDisplay($aResult)
 
A

Alofa

Гость
OffTopic:
Nbv_tim вам вроде ra4o желает помочь, но поскольку вы не раскрываете все карты, ему просто приходится тыкать пальцем в небо.
Сначала пишите:
Nbv_tim сказал(а):
существует текстовый файл
macId=30
macName=Ger
mc=45...
А после этого:
Nbv_tim сказал(а):
... в одномерном массиве id=(gd=7777 в результатье прохода на двумерный массив получается...
Скоро ему это надоест и вы останетесь вообще без помощников.
 
Автор
N

Nbv_tim

Новичок
Сообщения
47
Репутация
1
Alofa сказал(а):
OffTopic:
Nbv_tim вам вроде ra4o желает помочь, но поскольку вы не раскрываете все карты, ему просто приходится тыкать пальцем в небо.
Сначала пишите:
Nbv_tim сказал(а):
существует текстовый файл
macId=30
macName=Ger
mc=45...
А после этого:
Nbv_tim сказал(а):
... в одномерном массиве id=(gd=7777 в результатье прохода на двумерный массив получается...
Скоро ему это надоест и вы останетесь вообще без помощников.
это уже второй вопрос, по первому все ок, так как разбираю сразу несколько файлов в которых данные отличаются. чтобы не плодить лишнии темы решил задать вопрос в этой.
 
Верх