Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Присвоить значения переменной из текстового файла

Ответить
Настройки темы
[решено] Присвоить значения переменной из текстового файла
Cem Cem вне форума

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток! Помогите, пожалуйста, с командами и синтаксисом.
Задача:
Имеется текстовый документ 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
Через InputBox мы вводим название животного. Находим его в тексте:
Код: Выделить весь код
$VesText = FileRead("1.txt")
$Jivotnoe = InputBox("Название", "Введите животное:", "Здесь вводим", "", 250, 150, Default, Default, 0)
$a = StringRegExp($VesText, $Jivotnoe, 1)
MsgBox(0, '', $a[0])
Теперь вопрос: После того как мы нашли животное, например, Кот (5 строка в документе), как присвоить переменной $kartinka значение "D:\Image\Кот.jpeg" (6 строка), а переменной $video - "D:\Video\Кот.mpeg" (7 строка)?

Отправлено: 18:08, 24-02-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Cem:
Номера строк приведены для указания того, что между строками бывают и пустые. В самом текстовом документе нумерации строк нет. »
Это лишнее. Достаточно оформить текст тэгом [code] (что Вы и так сделали), либо, если важно сохранить кодировку, вид концов строк и т.п. — упаковав файл в архив.

Цитата Cem:
Теперь вопрос: После того как мы нашли животное, например, Кот (5 строка в документе), как присвоить переменной $kartinka значение "D:\Image\Кот.jpeg" (6 строка), а переменной $video - "D:\Video\Кот.mpeg" (7 строка)? »
Например, так:
Код: Выделить весь код
#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
Крайне рекомендую перевести Ваш текстовый файл в формат ini-файла и пользовать соответствующие функции.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:38, 24-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо! Как оказалось, всё гениальное действительно просто.

Цитата Iska:
Local $aContent = StringSplit(FileRead("1.txt"), @CRLF, 3) »
Только тут, пожалуй, лучше поставить 1.
Код: Выделить весь код
Local $aContent = StringSplit(FileRead("1.txt"), @CRLF, 1)
Сложил было, что-то такое, но коряво работает.
Код: Выделить весь код
$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
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Cem, по-прежнему настоятельно рекомендую подумать над переводом Вашего файла в формат INI, наподобие:
Код: Выделить весь код
[Собака]
"Image"="D:\Image\Собака.jpeg"
"Video"="D:\Video\Собака.mpeg"

[Кот]
"Image"="D:\Image\Кот.jpeg"
"Video"="D:\Video\Кот.mpeg"

[Черепаха]
"Image"="D:\Image\Черепаха.jpeg"
"Video"="D:\Video\Черепаха.mpeg"
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:20, 25-02-2014 | #4


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить 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
tst.txt:
Код: Выделить весь код
Собака
D:\Image\Собака.jpeg
D:\Video\собака.mpeg

Кот
D:\Image\кот.jpeg
D:\Video\Кот.mpeg

черепаха
D:\Image\черепаха.jpeg
D:\Video\черепаха.mpeg

Последний раз редактировалось madmasles, 25-02-2014 в 11:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:51, 25-02-2014 | #5


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить 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
tst.ini:
Код: Выделить весь код
[Собака]
Image="D:\Image\Собака.jpeg"
Video="D:\Video\Собака.mpeg"
[кот]
Image="D:\Image\Кот.jpeg"
Video="D:\Video\Кот.mpeg"
[Черепаха]
Image="D:\Image\Черепаха.jpeg"
Video="D:\Video\Черепаха.mpeg"
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:07, 25-02-2014 | #6

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


madmasles, Спасибо! Ваш метод, конечно, очень хорош, однако, в таком случае, если на данный момент "Животных" - 1200 наименований, то

Цитата madmasles:
Local $sTxt, $aSearch[3] = ['Собака', 'Кот', 'Черепаха'], $sImageFile, $sVideoFile »
будет выглядеть немного "страшно", а база может пополняться (загрузчик для базы уже написал).
Касательно метода, товарища Iska (которому отдельное СПАСИБО) - наверное, идеальное решение.
Надо разобраться, пойду дальше листать литературу.

Отправлено: 15:37, 27-02-2014 | #7


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Cem,
Печально, но Вы не поняли, что $aSearch[3] используется только для примера поиска.
читать дальше »
Код: Выделить весь код
Local $sTxt, $sSearch, $sImageFile, $sVideoFile

$sSearch = InputBox('Название', 'Введите животное:', 'Здесь вводим', '', 250, 150, Default, Default, 0)
If Not $sSearch Then Exit 1
$sTxt = FileRead(@ScriptDir & '\tst.txt')
If Not StringInStr($sTxt, $sSearch, 1) Then
    If Not StringInStr($sTxt, StringLower($sSearch), 1) Then
        ConsoleWrite('No word "' & $sSearch & '" in text' & @LF)
        Exit 2
    EndIf
EndIf
$sImageFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & $sSearch & '\.j.*?)$.*', '$1')
If @extended <> 1 Then
    $sImageFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & StringLower($sSearch) & '\.j.*?)$.*', '$1')
    If @extended <> 1 Then
        ConsoleWrite('Can not search image file for word "' & $sSearch & '" in text' & @LF)
    EndIf
EndIf
$sVideoFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & $sSearch & '\.m.*?)$.*', '$1')
If @extended <> 1 Then
    $sVideoFile = StringRegExpReplace($sTxt, '(?ims).*^([a-z].*?\\' & StringLower($sSearch) & '\.m.*?)$.*', '$1')
    If @extended <> 1 Then
        ConsoleWrite('Can not search video file for word "' & $sSearch & '" in text' & @LF)
    EndIf
EndIf
ConsoleWrite('Image file for word "' & $sSearch & '": ' & $sImageFile & @LF)
ConsoleWrite('Video file for word "' & $sSearch & '": ' & $sVideoFile & @LF)
и
читать дальше »
Код: Выделить весь код
Local $sIni = @ScriptDir & '\tst.ini', $sSearch, $sImageFile, $sVideoFile

$sSearch = InputBox('Название', 'Введите животное:', 'Здесь вводим', '', 250, 150, Default, Default, 0)
If Not $sSearch Then Exit 1
$sImageFile = IniRead($sIni, $sSearch, 'Image', 'Error')
If $sImageFile = 'Error' Then
    $sImageFile = IniRead($sIni, StringLower($sSearch), 'Image', 'Error')
    If $sImageFile = 'Error' Then
        ConsoleWrite('Can not search image file for word "' & $sSearch & '" in text' & @LF)
    EndIf
EndIf
$sVideoFile = IniRead($sIni, $sSearch, 'Video', 'Error')
If $sVideoFile = 'Error' Then
    $sVideoFile = IniRead($sIni, StringLower($sSearch), 'Video', 'Error')
    If $sVideoFile = 'Error' Then
        ConsoleWrite('Can not search video file for word "' & $sSearch & '" in text' & @LF)
    EndIf
EndIf
If $sImageFile <> 'Error' Then ConsoleWrite('Image file for word "' & $sSearch & '": ' & $sImageFile & @LF)
If $sVideoFile <> 'Error' Then ConsoleWrite('Video file for word "' & $sSearch & '": ' & $sVideoFile & @LF)
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:32, 01-03-2014 | #8

Cem Cem вне форума Автор темы

Аватара для Cem

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


madmasles, Спасибо! Очень подробно "разжевали", теперь понял.

Отправлено: 05:02, 04-03-2014 | #9


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Присвоить значения переменной из текстового файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход