|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Присвоить значения переменной из текстового файла |
|
[решено] Присвоить значения переменной из текстового файла
|
![]() Новый участник Сообщения: 27 |
Доброго времени суток! Помогите, пожалуйста, с командами и синтаксисом.
Задача: Имеется текстовый документ 1.txt: 1.Собака 2.D:\Image\Собака.jpeg 3.D:\Video\Собака.mpeg 4. 5.Кот 6.D:\Image\Кот.jpeg 7.D:\Video\Кот.mpeg 8. 9.Черепаха 10.D:\Image\Черепаха.jpeg 11.D:\Video\Черепаха.mpeg Собака D:\Image\Собака.jpeg D:\Video\Собака.mpeg Кот D:\Image\Кот.jpeg D:\Video\Кот.mpeg Черепаха D:\Image\Черепаха.jpeg D:\Video\Черепаха.mpeg Теперь вопрос: После того как мы нашли животное, например, Кот (5 строка в документе), как присвоить переменной $kartinka значение "D:\Image\Кот.jpeg" (6 строка), а переменной $video - "D:\Video\Кот.mpeg" (7 строка)? |
|
Отправлено: 18:08, 24-02-2014 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Cem:
Цитата Cem:
#include <Array.au3> AutoItSetOption("MustDeclareVars", 1) Local $aContent = StringSplit(FileRead("1.txt"), @CRLF, 3) Local $sName = InputBox("Название", "Введите животное:", "Здесь вводим", "", 250, 150, Default, Default, 0) Local $lIndex = _ArraySearch($aContent, $sName) if $lIndex >=0 Then MsgBox(1, "", $aContent[$lIndex + 1]) MsgBox(1, "", $aContent[$lIndex + 2]) EndIf |
||
Отправлено: 23:38, 24-02-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать Спасибо! Как оказалось, всё гениальное действительно просто.
Цитата Iska:
Сложил было, что-то такое, но коряво работает. $VesText = FileRead("1.txt") $Jivotnoe = InputBox("Название", "Введите животное:", "Здесь вводим", "", 250, 150, Default, Default, 0) $a = StringRegExp($VesText, $Jivotnoe, 2, 1) $aLines = StringSplit($VesText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив For $i = 1 To $aLines[0] Step +1 If StringInStr($aLines[$i], $Jivotnoe) Then $kartinka = $aLines[$i+1] Next |
|
Отправлено: 02:03, 25-02-2014 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Cem, по-прежнему настоятельно рекомендую подумать над переводом Вашего файла в формат INI, наподобие:
|
Отправлено: 09:20, 25-02-2014 | #4 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Cem,
Можно так попробовать сделать: Local $sTxt, $aSearch[3] = ['Собака', 'Кот', 'Черепаха'], $sImageFile, $sVideoFile $sTxt = FileRead(@ScriptDir & '\tst.txt') For $i = 0 To 2 If Not StringInStr($sTxt, $aSearch[$i], 1) Then If Not StringInStr($sTxt, StringLower($aSearch[$i]), 1) Then ConsoleWrite('No word "' & $aSearch[$i] & '" in text' & @LF) ContinueLoop EndIf EndIf $sImageFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & $aSearch[$i] & '\.j.*?)$.*', '$1') If @extended <> 1 Then $sImageFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & StringLower($aSearch[$i]) & '\.j.*?)$.*', '$1') If @extended <> 1 Then ConsoleWrite('Can not search image file for word "' & $aSearch[$i] & '" in text' & @LF) ContinueLoop EndIf EndIf $sVideoFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & $aSearch[$i] & '\.m.*?)$.*', '$1') If @extended <> 1 Then $sVideoFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & StringLower($aSearch[$i]) & '\.m.*?)$.*', '$1') If @extended <> 1 Then ConsoleWrite('Can not search video file for word "' & $aSearch[$i] & '" in text' & @LF) ContinueLoop EndIf EndIf ConsoleWrite('image file for word "' & $aSearch[$i] & '": ' & $sImageFile & @LF) ConsoleWrite('video file for word "' & $aSearch[$i] & '": ' & $sVideoFile & @LF) ConsoleWrite('---' & @LF) Next |
|
Последний раз редактировалось madmasles, 25-02-2014 в 11:07. Отправлено: 10:51, 25-02-2014 | #5 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Cem,
Но рекомендую Вам сделать так, как советует коллега Iska, тогда код будет примерно такой: Local $sIni = @ScriptDir & '\tst.ini', $aSearch[3] = ['Собака', 'Кот', 'Черепаха'], $sImageFile, $sVideoFile For $i = 0 To 2 $sImageFile = IniRead($sIni, $aSearch[$i], 'Image', 'Error') If $sImageFile = 'Error' Then $sImageFile = IniRead($sIni, StringLower($aSearch[$i]), 'Image', 'Error') If $sImageFile = 'Error' Then ConsoleWrite('Can not search image file for word "' & $aSearch[$i] & '" in text' & @LF) ContinueLoop EndIf EndIf $sVideoFile = IniRead($sIni, $aSearch[$i], 'Video', 'Error') If $sVideoFile = 'Error' Then $sVideoFile = IniRead($sIni, StringLower($aSearch[$i]), 'Video', 'Error') If $sVideoFile = 'Error' Then ConsoleWrite('Can not search video file for word "' & $aSearch[$i] & '" in text' & @LF) ContinueLoop EndIf EndIf ConsoleWrite('image file for word "' & $aSearch[$i] & '": ' & $sImageFile & @LF) ConsoleWrite('video file for word "' & $aSearch[$i] & '": ' & $sVideoFile & @LF) ConsoleWrite('---' & @LF) Next |
Отправлено: 11:07, 25-02-2014 | #6 |
![]() Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать madmasles, Спасибо! Ваш метод, конечно, очень хорош, однако, в таком случае, если на данный момент "Животных" - 1200 наименований, то
Цитата madmasles:
Касательно метода, товарища Iska (которому отдельное СПАСИБО) - наверное, идеальное решение. Надо разобраться, пойду дальше листать литературу. |
|
Отправлено: 15:37, 27-02-2014 | #7 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Cem,
Печально, но Вы не поняли, что $aSearch[3] используется только для примера поиска. и |
Отправлено: 12:32, 01-03-2014 | #8 |
![]() Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать madmasles, Спасибо! Очень подробно "разжевали", теперь понял.
|
Отправлено: 05:02, 04-03-2014 | #9 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Cem,
Если у Вас всегда путь к файлам $sImageFile и $sVideoFile отличается только названием животного, то можно сделать совсем просто, без всяких файлов-баз: Local $s_Animal, $s_ImageFile, $s_VideoFile, $a_Path[2][2] = [[@ScriptDir & '\Files\Image\', '.jpeg'],[@ScriptDir & '\Files\Video\', '.mpeg']] ;~ $a_Path[0][0] - полный путь с обратным слешем в конце к папке с файлами-картинками; ;~ $a_Path[1][1] - расширение файлов-картинок; ;~ $a_Path[1][0] - полный путь с обратным слешем в конце к папке с файлами-видео; ;~ $a_Path[1][1] - расширение файлов-видео. ;~ поменяйте эти пути и расширения на свои. $s_Animal = InputBox('Название', 'Введите животное:', 'Здесь вводим', '', 250, 150, Default, Default, 0) If Not $s_Animal Then Exit 1 If FileExists($a_Path[0][0] & $s_Animal & $a_Path[0][1]) Then $s_ImageFile = $a_Path[0][0] & $s_Animal & $a_Path[0][1] EndIf If FileExists($a_Path[1][0] & $s_Animal & $a_Path[1][1]) Then $s_VideoFile = $a_Path[1][0] & $s_Animal & $a_Path[1][1] EndIf If $s_ImageFile Then ConsoleWrite('Image file for animal "' & $s_Animal & '": ' & $s_ImageFile & @LF) Else ConsoleWrite('Can not search image file for animal "' & $s_Animal & '"' & @LF) EndIf If $s_VideoFile Then ConsoleWrite('Video file for animal "' & $s_Animal & '": ' & $s_VideoFile & @LF) Else ConsoleWrite('Can not search video file for animal "' & $s_Animal & '"' & @LF) EndIf |
Последний раз редактировалось madmasles, 05-03-2014 в 20:29. Отправлено: 19:11, 05-03-2014 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Сборка текстового файла из содержимого другого текстового файла | icomboy | Скриптовые языки администрирования Windows | 0 | 10-09-2013 15:17 | |
CMD/BAT - [решено] Ввод Вывод, присвоение значения переменной из файла | Loki3D | Скриптовые языки администрирования Windows | 1 | 03-09-2013 15:34 | |
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную | VokaMut | Скриптовые языки администрирования Windows | 12 | 26-11-2012 15:54 | |
CMD/BAT - Смена кодировки текстового файла, поиск строки и разбор значения | profcom | Скриптовые языки администрирования Windows | 0 | 10-11-2011 20:20 | |
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. | Nun-Nun | Скриптовые языки администрирования Windows | 6 | 13-05-2009 13:28 |
|