Что нового

[Массивы] присвоить значение переменной из строки в файле через массив

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
дело вот в чем в скрипте очень много переменных такого типа
Код:
Global $failMarker1 = (@ScriptDir & '\1.txt') ; Фаил маркер
Global $failMarker2 = (@ScriptDir & '\2.txt') ; Фаил маркер
Global $failMarker3 = (@ScriptDir & '\3.txt') ; Фаил маркер


выше перечисленные переменные я записал в файл marker.txt , а затем добавил в массив , а при вызове из массива значение переменной не присваивается помогите разобраться в чем ошибка делаю я это так

Код:
Dim $failMarker
_FileReadToArray(@ScriptDir & "\marker.txt",$failMarker)
Dim $aMassiv
_FileReadToArray(@ScriptDir & "\nik.txt",$aMassiv)

Switch 1
    Case FileExists($failMarker[1])
        $izMasiva = $aMassiv[1]
    Case FileExists($failMarker[2])
        $izMasiva = $aMassiv[2]
    Case FileExists($failMarker[3])
        $izMasiva = $aMassiv[3]
EndSwitch
 

SyDr

Сидра
Сообщения
651
Репутация
158
general66, макрос @ScriptDir не содержит на конце обратно слэша.
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
SyDr [?]
макрос @ScriptDir не содержит на конце обратно слэша.
то руками имя файла писал и слэш пропустил со слэшем все равно пишет ошибку
D:\WorkPleac\NEW\test.au3 (21) : ==> Variable used without being declared.:
Send($izMasiva)
Send(^ ERROR


в файле marker.txt путь к файлу прописан полностью без макроса вот так Global $failMarker1 = ('d:\WorkPleac\NEW\1.txt')
 

SyDr

Сидра
Сообщения
651
Репутация
158
general66
Ошибка с $izMasiva. Похоже, неправильно срабатывает блок Switch. Добавь туда Case Else (иначе).
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
у меня работает так
Код:
#include <file.au3>
Global $failMarker1 = ('1.txt') ; Фаил маркер
Global $failMarker2 = ('2.txt') ; Фаил маркер
Global $failMarker3 = ('3.txt') ; Фаил маркер
Dim $aMassiv
_FileReadToArray('er.txt', $aMassiv); в er.txt записаны имена переменных, указанных выше
If FileExists($failMarker1) Then
	$izMasiva = $aMassiv[1]
	$4 = StringReplace($izMasiva, "$", "")
	$5 = Eval($4)
	ShellExecute($5)
ElseIf FileExists($failMarker2) Then
	$izMasiva = $aMassiv[2]
	$4 = StringReplace($izMasiva, "$", "")
	$5 = Eval($4)
	ShellExecute($5)
ElseIf FileExists($failMarker3) Then
	$izMasiva = $aMassiv[3]
	$4 = StringReplace($izMasiva, "$", "")
	$5 = Eval($4)
	ShellExecute($5)
EndIf

ошибка была в том, что из массива мы получаем данные, которые не могут быть использованы как имя переменной. поэтому пришлось рубить данные из массива. то есть символ переменной, а потом использовать
Код:
eval()

читай справку по
Код:
Assign ()

__________________________________________________
SyDr
случайно клацнул тебе спасибо..браузер затупил
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Александр [?]
ошибка была в том, что из массива мы

спасибо за разъяснения , просто целью переноса переменных в файл было сократить кол-во строк, в скрипте таких переменных где то 300 строк , а в вашем примере наоборот добавляются строки так что оставлю как есть ,еще раз спасибо за помощь.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
это наверное то что ты хотел :smile:
Код:
#include <file.au3>
Dim $failMarker
_FileReadToArray(@ScriptDir & "\marker.txt", $failMarker)
Dim $aMassiv
_FileReadToArray(@ScriptDir & "\nik.txt", $aMassiv)

Switch 1
	Case FileExists($failMarker[1])
		$aMassiv[1] = $failMarker[1]
		$izMassiva = $aMassiv[1]
		
	Case FileExists($failMarker[2])
		$aMassiv[2] = $failMarker[2]
		$izMassiva = $aMassiv[2]
		
	Case FileExists($failMarker[3])
		$aMassiv[3] = $failMarker[3]
		$izMassiva = $aMassiv[3]
		
EndSwitch
 
Верх