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

Ответить
Аватара пользователя
Cem

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

Сообщение Cem »

Доброго времени суток! Помогите, пожалуйста, с командами и синтаксисом.

Задача:

Имеется текстовый документ 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 строка)?
Аватара пользователя
Iska

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение Iska »

Цитата Cem:



Номера строк приведены для указания того, что между строками бывают и пустые. В самом текстовом документе нумерации строк нет.
[решено] Присвоить значения переменной из текстового файла




Это лишнее. Достаточно оформить текст тэгом

Код: Выделить всё

[/url] (что Вы и так сделали), либо, если важно сохранить кодировку, вид концов строк и т.п. — упаковав файл в архив.




				Цитата [b]Cem[/b]:
	
	
		
				Теперь вопрос: После того как мы нашли животное, например, Кот (5 строка в документе), как присвоить переменной $kartinka значение "D:\Image\Кот.jpeg" (6 строка), а переменной $video - "D:\Video\Кот.mpeg" (7 строка)? [url=viewtopic.php?p=2552315#p2552315]»[/url]
		
	
	
Например, так:


 
 Код: [url=#][/url]
 [code]#include 
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-файла и пользовать соответствующие функции.
Аватара пользователя
Cem

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение Cem »

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




Цитата 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
Аватара пользователя
Iska

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение Iska »

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"
Аватара пользователя
madmasles

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение madmasles »

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

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение madmasles »

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"
Аватара пользователя
Cem

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение Cem »

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




Цитата madmasles:



Local $sTxt, $aSearch[3] = ['Собака', 'Кот', 'Черепаха'], $sImageFile, $sVideoFile
[решено] Присвоить значения переменной из текстового файла




будет выглядеть немного "страшно", а база может пополняться (загрузчик для базы уже написал).

Касательно метода, товарища Iska (которому отдельное СПАСИБО) - наверное, идеальное решение.

Надо разобраться, пойду дальше листать литературу.
Аватара пользователя
madmasles

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение madmasles »

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)
Аватара пользователя
Cem

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение Cem »

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

Re: [решено] Присвоить значения переменной из текстового файла

Сообщение madmasles »

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
Ответить

Вернуться в «AutoIt»