Русское сообщество AutoIt

  • Май 19, 2013, 23:13:26 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Создана конференция в Jabber'е для обсуждения мелких вопросов касающихся AutoIt.

Всем у кого есть джаббер-клиент, могут присоединиться к конференции по адресу xmpp:autoit@conference.jabber.ru

Комната/Конференция/Чат не призвана заменить этот форум, а лишь для ускорения получения ответов на элементарные и короткие вопросы, которые возможно не требуют создания специальной темы на данном форуме. Для всех остальных, сколь-нибудь сложных и комплексных проблем - исключительно на форум. Комната является постоянной, но при заходе у пользователя будет отсутствовать право писать в общий чат.

Тема на форуме.

Реклама

Автор Тема: [Данные, строки] Как записать 2D массив в файл  (Прочитано 2406 раз)

0 Пользователей и 1 Гость смотрят эту тему.

anonymous7 [?]

Как записать 2D массив в файл и желательно прочитать его из файла в массив 2D.




  Записан

zlo-kazan [?]

Вводит масив $items в ini и потом его выводит в массив $items2




  Записан

anonymous7 [?]

Пасиб за ответ! Есть такая команда _FileWriteFromArray, но почему-то в ней не предусмотрена запись многомерных массивов...
Из стандартной справки нашёл такой, вполне удовлетворяющий меня, способ:
Код: AutoIt [Выделить]
$var = IniReadSection("C:\Temp\myfile.ini", "section2")
If @error Then
    MsgBox(4096, "", "Error occured, probably no INI file.")
Else
    For $i = 1 To $var[0][0]
        MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1])
    Next
EndIf

Код: AutoIt [Выделить]
; This is the INI file we will write to.  It will be created on the Desktop.
$sIni = @DesktopDir & "\AutoIt-Test.ini"

; Demonstrate creating a new section using a string as input.
$sData = "Key1=Value1" & @LF & "Key2=Value2" & @LF & "Key3=Value3"
IniWriteSection($sIni, "Section1", $sData)

; Demonstrate creating a new section using an array as input.
$aData1 = IniReadSection($sIni, "Section1") ; Read in what we just wrote above.
For $i = 1 To UBound($aData1) - 1
    $aData1[$i][1] &= "-" & $i  ; Change the data some
Next

IniWriteSection($sIni, "Section2", $aData1) ; Write to a new section.

; Demonstrate creating an array manually and using it as input.
Dim $aData2[3][2] = [ [ "FirstKey", "FirstValue" ], [ "SecondKey", "SecondValue" ], [ "ThirdKey", "ThirdValue" ] ]
; Since the array we made starts at element 0, we need to tell IniWriteSection() to start writing from element 0.
IniWriteSection($sIni, "Section3", $aData2, 0)
« Последнее редактирование: Май 06, 2011, 23:34:00 от anonymous7 »



  Записан

AZJIO [?]

anonymous7
так?

Код: AutoIt [Выделить]
#Include <File.au3>
#include <Array.au3>
$Path = @ScriptDir&'\file.txt'
$Razdelit=' - разделитель - '

Dim $arr1[3][2] = [[1,2],[3,4],[5,6]]
_ArrayDisplay($arr1, 'Массив arr1')
$tmp=''
For $i = 0 to UBound($arr1)-1
    $tmp&=$arr1[$i][0]&$Razdelit&$arr1[$i][1]&@CRLF
Next
$file = FileOpen($Path,2)
FileWrite($file, $tmp)
FileClose($file)

MsgBox(0, 'Message', 'Записано, проверь')
;=======================================
Dim $aTmp1
If Not _FileReadToArray($Path,$aTmp1) Then
   MsgBox(4096,"Ошибка", "Не могу прочитать в массив")
   Exit
EndIf
Dim $arr1_New[$aTmp1[0]][2]
For $i = 1 to $aTmp1[0]
    $aTmp2=StringSplit($aTmp1[$i], $Razdelit, 1)
    If $aTmp2[0]>1 Then
        $arr1_New[$i-1][0]=$aTmp2[1]
        $arr1_New[$i-1][1]=$aTmp2[2]
    EndIf
Next
_ArrayDisplay($arr1_New, 'Массив arr1_New')
 
« Последнее редактирование: Май 07, 2011, 00:41:44 от AZJIO »



  Записан

focus [?]

Уважаемый AZJIO.Прокомментируйте пожалуста в вашем коде вот эту строку
Код: AutoIt [Выделить]
$tmp&=$arr1[$i][0]&$Razdelit&$arr1[$i][1]&@CRLF
, а именно
Код: AutoIt [Выделить]
$tmp&=
. Когда до цикла обявляли эту переменную -
Код: AutoIt [Выделить]
$tmp=''
. небыло знака & . Без него в файл записывается только последняя пара массива. Ставлю знак на место - всё нормально работает. В справке про циклы тоже нет &.




  Записан

madmasles [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 1835
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 4712
  • Версия AutoIt: 3.3.8.1
    • Награды
focus,
Про &= можно посмотреть: Справка -> Language Reference -> Operators  или здесь.

Dellroc [?]

Помогите осознать как файл такого типа:
[Base]
0=1 | 1 | 1 | 1
1=2 | 2 | 2 | 2
2=3 | 3 |  |
3=4 | 4 |  |
4=5 | 5 |  |

записать в массив такого типа
Код: AutoIt [Выделить]
[['1','1','1','1'],['2','2','2','2'],['3','3'],['4','4'],['5','5']]




  Записан

Kaster [?]

  • Глобальный модератор
  • Бритва, Бритва Оккама
  • *
  • *****
  • Репутация: 581
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 3751
  • Версия AutoIt: 3.3.8.1
  • Мой Аватар, он лучший самый
    • Награды
OffTopicDellroc  [?]
Цитата
Помогите осознать как файл такого типа:
может медитация поможет?  ;D




  Записан
Конференция посвященная AutoIt на jabber.ru - autoit@conference.jabber.ru
Как попасть на конференцию читаем тут
Продолжать дискуссию в теме отмеченной как "Решенная" - моветон.
Банхамером не обладаю, так что расслабьтесь ;)
Банхамером обладаю, так что не расслабляться :Ban:

AZJIO [?]

Dellroc
Можно применить IniReadSection, потом в цикле для второй колонки полученного масива выполнить StringSplit, получив 4 элемента, которые присваюваются очередной строке предварительно созданному четырёх-колоночному массиву.




  Записан

Dellroc [?]

Вот не знаю я как разделить вот такое значение 1 , 1 , 1 , 1 из одного столбца на 4... Если кто покажет как - буду признателен.




  Записан

madmasles [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 1835
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 4712
  • Версия AutoIt: 3.3.8.1
    • Награды
Dellroc,
Попробуйте так.
Код: AutoIt [Выделить]
#include <Array.au3>

$iUb2 = 2
$sIniFile = @ScriptDir & '\test.ini'
$sSection = 'Base'

$aSection = IniReadSection($sIniFile, $sSection)
If @error Then
    MsgBox(16, 'Error', 'IniReadSection')
    Exit
EndIf

Dim $aResult[$aSection[0][0] + 1][$iUb2] = [['Ключ', 'Значения']]
For $i = 1 To $aSection[0][0]
    $aTemp = StringSplit($aSection[$i][1], '|')
    If $iUb2 < $aTemp[0] + 1 Then
        $iUb2 = $aTemp[0] + 1
        ReDim $aResult[$aSection[0][0] + 1][$iUb2]
    EndIf
    $aResult[$i][0] = $aSection[$i][0]
    For $j = 1 To $aTemp[0]
        $aResult[$i][$j] = $aTemp[$j]
    Next
Next
_ArrayDisplay($aResult)


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться




  Записан

Dellroc [?]

Спасибо! Помогли!
Было бы вообще идеально, если бы не было вот этого столбца:
88
89
90
91
92




  Записан

madmasles [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 1835
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 4712
  • Версия AutoIt: 3.3.8.1
    • Награды
Dellroc  [?]
Цитата
если бы не было вот этого столбца:
Код: AutoIt [Выделить]
#include <Array.au3>

$iUb2 = 2
$sIniFile = @ScriptDir & '\test.ini'
$sSection = 'Base'

$aSection = IniReadSection($sIniFile, $sSection)
If @error Then
    MsgBox(16, 'Error', 'IniReadSection')
    Exit
EndIf

Dim $aResult[$aSection[0][0]][$iUb2]
For $i = 0 To $aSection[0][0] - 1
    $aTemp = StringSplit($aSection[$i + 1][1], '|')
    If $iUb2 < $aTemp[0] Then
        $iUb2 = $aTemp[0]
        ReDim $aResult[$aSection[0][0]][$iUb2]
    EndIf
    For $j = 0 To $aTemp[0] - 1
        $aResult[$i][$j] = $aTemp[$j + 1]
    Next
Next
_ArrayDisplay($aResult)




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
Двухмерный массив записать в одномерный.
AutoIt для новичков
Detka.i.alex 4 1516 Последний ответ Май 14, 2010, 22:12:07
от CreatoR
Как извлечь данные из строки в массив
AutoIt для новичков
Luke 2 1934 Последний ответ Декабрь 21, 2010, 15:46:10
от Luke
[Данные, строки] Строка как массив из функций
AutoIt для новичков
clown 7 1664 Последний ответ Февраль 14, 2011, 22:51:27
от clown
[Данные, строки] Конвертировать строку с разделителями в массив
AutoIt для новичков
WasonAl 2 1938 Последний ответ Март 15, 2011, 20:29:04
от WasonAl
[Данные, строки] Из в TXT файла в 2d массив
AutoIt для новичков
Houl777 5 1476 Последний ответ Июнь 24, 2011, 13:57:54
от Houl777
[Данные, строки] Выгрузка данных из _GUICtrlListView в 2D массив и загрузка обратно
AutoIt для новичков
kodan76 6 1081 Последний ответ Декабрь 22, 2011, 02:19:53
от Yashied
[Данные, строки] Как сделать функцию от IniRead и Split выдающую массив?
AutoIt для новичков
Leanna 3 744 Последний ответ Февраль 09, 2012, 17:05:25
от Leanna
Записать данные в файл
Регулярные выражения и прочее
Biforz 9 1308 Последний ответ Август 06, 2012, 04:12:08
от joiner
[Данные, строки] Помогите выцепить из текста все имена jpg файлов и занести их в массив.
Регулярные выражения и прочее
vaf 5 834 Последний ответ Ноябрь 21, 2012, 12:23:39
от vaf
Перенесено: [Данные, строки] Помогите выцепить из текста все имена jpg файлов и занести их в массив.
AutoIt для новичков
madmasles 0 209 Последний ответ Ноябрь 20, 2012, 10:23:03
от madmasles


Реклама


* Пользователи онлайн
  • Dot Гостей: 108
  • Dot Скрыт: 1
  • Dot Пользователей: 25
  • Dot Пользователи Online: