Войти

Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Creat0R
18-07-2006, 17:02
XXXler
пложение самого раздела в файле тоже критично?
Положение нет, оно иногда может менятся (не моим скриптом), но вот название его будет всегда одинаковым.

P.S:
Под словом Раздел - я подразумиваю начало пунктам под которым есть ключи и значение у них, вот пример:
[Раздел1]
Ключь = Значение

[Раздел2]
Ключь = Значение
И т.д..

XXXler
18-07-2006, 19:09
Вызов функции:
IniWriteVP(Файл,Секция,Параметр,Значение,[опционально:позиция параметра в секции])
Например:
IniWriteVP($File,"Section","Parametr","Этот параметр будет вторым",2)
IniWriteVP($File,"Section","Parametr","Этот параметр будет записан также, как и с пом. IniWrite")

Func IniWriteVP($File,$Sect,$Param,$Val,$Pos=0)
Local $ValArr,$i
If $Pos<>0 Then IniDelete($File,$Sect,$Param)
$ValArr=IniReadSection($File,$Sect)
If @error Or $Pos=0 Or $ValArr[0][0]<$Pos Then
IniWrite($File,$Sect,$Param,$Val)
SetError(@error)
Else
For $i=1 To $ValArr[0][0]
IniDelete($File,$Sect,$ValArr[$i][0])
Next
For $i=1 To $ValArr[0][0]
If $Pos=$i Then IniWrite($File,$Sect,$Param,$Val)
IniWrite($File,$Sect,$ValArr[$i][0],$ValArr[$i][1])
Next
EndIf
EndFunc

Creat0R
19-07-2006, 00:11
XXXler
У меня что-то не получается :( . Я если честно, так и не понял, что куда прописывать - Я пытался сделать так:

$Sect="Test1"
$Param="Параметр"
$Val="Значение"
$File="Test.ini"

Func IniWriteVP($File,$Sect,$Param,$Val,$Pos=0)
IniWriteVP($File,$Sect,$Param,$Val, 2)

EndFunc

Но я понимаю что тут явно чего то нехватает, и этот вариант не срабатывает.

Если не трудно, напиши пожалуйста скрипт так, чтобы он в файл Test.ini, в секцию "Test3", и в третью строчку этой секции, записывал параметр "Проба" со значением "1". Т.е вот так должна быть прописана строка:

[Test3]
Тут неважно что, но что-то записано.
Тут тоже неважная запись.
Проба = 1
Тут тоже неважная запись, но не обязательно последняя

Creat0R
19-07-2006, 01:48
bogomolv
"Я читал в справке раздел по использованию функций. Приведенный там пример меня не вдохновил, и я решил усовершенствовать синтаксис команд в AutoIt3, засунув обращение к функции внутрь самой функции. Но я понимаю, что тут явно чего-то не хватает! Как бы мне еще поиздеваться над AutoIt'ом, а заодно и над сокнижниками?"
А зачем-же так издеваться надо мной, я всего навсего, прошу о помощи в том, чего ещё не понимаю, но это не значит что я полный тупицца, который не хочет слушать то, что ему твердят... вот только твердили бы ясно, а не вырожениями типа „Как бы мне еще поиздеваться над AutoIt'ом“ - Я же не знаю как эти функции работают, и что куда можно пихать, а что нельзя.
Ты хочеш сказать, что в справке ясно описанно как сделать мою задумку, или что мою задумку не реально сделать в AotoIt? Тогда как-же в нём делают очень сложные задачи? а такую простую, как запись в определённую строку определённой секции ини файла, не возможно?! не поверю. Просто другое дело, нехватает опыта, или знании сделать такую задачу (или желания), а так или иначе, прямым, или обходным путём, реализовать мою задумку возможно... и надеюсь найдутся добрые, опытные, и желающие помочь новичку в этом деле (в программировании) люди (В их число, думаю входишь и ты, но почему-то предпочитаешь видеть во мне не новичка в программировании, а чайника в целом - что вовсе неверно!).

P.S:
Извеняюсь за офтоп, но мне хочется чтобы меня понимали, это необходимо для моего прибывание на форуме!

Creat0R
19-07-2006, 15:32
bogomolvТы не хочешь:
1) читать справку;
2) слушать советы прочитать справку;
3) договариваться, что ты все-таки почитаешь справку.
Я справку почитал, и теперь попытаюсь объяснить (метафорой), как я понимаю то что я с неё (и не только) вычитал...

Во многих кодах, мне ясны только основные вырожения, типа IniWrite, IniRead, For..Next, Do...Untill, переменные $var, $Func, $Sect, $param, $val, $File и т.д и т.п... Но во многих случаях (да почти во всех), увидив их в примерах справки, или тут на форуме, мне не удаётся соеденить их логический смысл воедино. Это подобно тому, как я знаю с десяток слов на французском в отдельности (их звучание и дословный перевод), но если мне начнут говорить на этом языке, даже услышав знакомые слова, я не пойму о чём речь, потому что нету опыта в разгаворе и понимании языка. А взяв русско-французский словарь (аналогия на справку в AotoIt), и прочитав его залпом, будет таже ситуация, и разговор на этом языке я не пойму, пока не стану говорить на нём (разве что если тот самый словарь, будет написан с подробными разъяснениями и мини-уроками по практике речепонимания и произношения).

А пример выше, огромное конечно спасибо за попытку, но он, как я понял, проверяет существует ли заданное значение в заданной секции, и если да, то создаёт заданный параметр с заданным значением в этой секции на одну строчку ниже, распознанного значения... а если значение не найдено, то заданный параметр со значением записывается в первую строчку заданного параметра...

Но мне, вообще-то, ненужно чтобы там была какая-то либо или чего-то либо проверка, нужно чтобы был скрипт, в определённую команду которого (типа $Pos=3), я смог бы внести номер строки заданной секции, и после запуска данного скрипта, в эту строку прописался бы заданный параметр со значеним.

На основе этого примера очень легко нарисовать свою конструкцию:
Я согласен, что может быть тебе просто, но вот мне, вовсе не просто, не то чтобы написать такую конструкцию, но и понять мне её вовсе не просто.

Ты так и не прочитал пример использования функций из справки:
Так я и немогу, у меня в справке приведённого тобой примера вовсе нет... может у меня другая справка? если не трудно, дай пожалуйста ссылку, на ту справку которую юзаешь...

Creat0R
20-07-2006, 14:43
bogomolv
Скопируй написанный для тебя код в конец своего скрипта (после Exit) и обратись к функции командой IniWriteVP($File,"Section","Parametr","Этот параметр будет вторым",2).
Я делал точно так, но параметр со значением прописывается именно в первую строчку секции.

Кстати, а зачем тебе это? Обычно, программам, работающим с INI-файлами, по барабану, какая последовательность у нужных им параметров.
В моём случае, как раз-то не побарабану. Дело в том, что эти параметры, это пункты меню в программе (Файл | Правка | Вид и т.д), которые нужно убирать\показывать при необходимости. Но для этого, нужно именно прописывать строчки в то место, где они и должный быть (я знаю заранее где), чтобы небыло путанницы в последовательности их появления в программе.

А на счёт справки, Спасибо, так намного проще понимать что тебе советуют! :)

XXXler
20-07-2006, 14:54
Creat0R, пустые строки в секции имеют место?

Creat0R
20-07-2006, 15:04
XXXler
пустые строки в секции имеют место?
Их там нету (за исключением последней, и то, я могу её стереть, она там не обязательна).

XXXler
20-07-2006, 15:18
Creat0R, все отловил ситуацию:
при таком заполнении:

Func IniWriteVP($File,$Sect,$Param,$Val,$Pos=0)
Local $ValArr,$i
If $Pos<>0 Then IniDelete($File,$Sect,$Param)
$ValArr=IniReadSection($File,$Sect)
If @error Or $Pos=0 Or $ValArr[0][0]<$Pos Then
IniWrite($File,$Sect,$Param,$Val)
SetError(@error)
Else
For $i=1 To $ValArr[0][0]
IniDelete($File,$Sect,$ValArr[$i][0])
Next
For $i=1 To $ValArr[0][0]
If $Pos=$i Then IniWrite($File,$Sect,$Param,$Val)
IniWrite($File,$Sect,$ValArr[$i][0],$ValArr[$i][1])
Next
EndIf
EndFunc

For $i=1 To 3
For $y=1 to 10
IniWriteVP(@ScriptDir&"\Test.ini","Test"&$i,"Par"&$y,"Фигня")
Next
Next

IniWriteVP(@ScriptDir&"\Test.ini","Test1","Par100","пятое значение",5)
IniWriteVP(@ScriptDir&"\Test.ini","Test3","Par3","третье значение",3)
IniWriteVP(@ScriptDir&"\Test.ini","Test3","Par1","седьмое значение",7)


при присвоении Par1 седьмой позиции Par3 становится вторым, т.к. Par1 переходит в 7 строку:

[Test1]
Par1=Фигня
Par2=Фигня
Par3=Фигня
Par4=Фигня
Par100=пятое значение
Par5=Фигня
Par6=Фигня
Par7=Фигня
Par8=Фигня
Par9=Фигня
Par10=Фигня
[Test2]
Par1=Фигня
Par2=Фигня
Par3=Фигня
Par4=Фигня
Par5=Фигня
Par6=Фигня
Par7=Фигня
Par8=Фигня
Par9=Фигня
Par10=Фигня
[Test3]
Par2=Фигня
Par3=третье значение
Par4=Фигня
Par5=Фигня
Par6=Фигня
Par7=Фигня
Par1=седьмое значение
Par8=Фигня
Par9=Фигня
Par10=Фигня


тут наверное прийдется, предварительно загнать все изменения ini-файла в массив, а потом его перезаписать с нуля - тогда позиции будут жесткими, иначе все будет плавать.

попожжа наваяю, может быть

Creat0R
20-07-2006, 16:10
XXXler
Огромное спасибо за такое внимание!

А может быть есть такая команда, которая после вставки параметра в первую строку, будет как бы двигать его (параметр) по одной строке вниз?

А вообще, как я потихоньку начинаю убиждаться, моя задумка очень сложная для выполнения (не только на AutoIt) тем способом который я объяснил. Тогда у меня есть немного другая альтернатива, но цель впринципе та же:

Вместо прописывания параметров в определённую строку секции, можно было бы проверять если заданный параметр прописан так как он определён (в скрипте), и если так и прописан, то пусть к этому параметру дописывается символ ; (чтобы параметр был как бы закоментирован), а если у этого параметра уже прописан такой символ, то пусть он убирается, и параметр таким образом становится активным - Этот вриант, как мне кажется, наиболее подходящий, и думаю даже более прост для выполнения скриптом AutoIt.

XXXler
20-07-2006, 18:44
Creat0R, чего-то я недопонимаю: если тебе нужно добавить\убрать, например, 5 и 6 по счету элемент меню, зачем изменять позиции остальных елементов?

добавить:
IniWriteVP($IniFile,"Menu_1","Item_5","пятый элемент",5)
IniWriteVP($IniFile,"Menu_1","Item_6","шестой элемент",6)


убрать:
IniDelete($IniFile,"Menu_1","Item_5")
IniDelete($IniFile,"Menu_1","Item_6")

Creat0R
20-07-2006, 19:23
XXXler
Дело в том, что там 7 пунктов меню, и если я, допустим уберу третьий пункт, то тот который был четвёртым, автоматом станет третьийм, и уже потом скрипт ошибётся. А также, может быть такая ситуация (если почти все меню будут убранны), когда останутся два-три пункта меню, и их ненужно трогать, а также ненужно создавать тех которых нету (и которые должный быть, если их включикли - по вызову этого же скрипта, но с другим ключём), поэтому я немогу узнать, какие есть, а каких нету, и нужно просто не убирать их, а закоментировать (как я писал в последнем посте про альтернативу), или раскоментировать, если они закоментированный (символом ; ).

Creat0R
20-07-2006, 19:38
bogomolv
Давай проверим.
Создай Блокнотом файл C:\Test.ini из трех строк
Сделал всё в точности так, и вообще никакая строчка не прописалась.

Creat0R
20-07-2006, 22:48
bogomolv
Запости скрипт, который ты написал для проверки.

В атаче скрипт Test.au3 и файл Test.ini.

ANGRO
21-07-2006, 02:15
А есть книги по AutoIt'у? (Хорошо, т.е понятно написанны)
Возьми хорошо написанную книгу по WinAPI, почитай недельку перед сном, будеш AutoIt набирать с выключенным монитором. :laugh:

Creat0R
21-07-2006, 04:05
ANGRO
Имелось в виду что ты Creat0R вставиш функцию целиком из поста выше
Так можно было так и написать, а не вводить такого как я, по твоим словам, чайника, в догадки.

для тебя человек целую функцию написал а ты даже разобраться не хочеш.
Спасибо ему что написал эту функцию, но я не то что не хочу - я не могу, не знаю как, не хватает опыта, знании и т.д и т.п.

Возьми за правило сначало разобраться в листинге хотя бы процентов на 50, а потом стремиться к результату в виде билда иначе соберёш 100% не работающий код.
Что такое листинг, и что такое билд?

Матрицу наверное смотрел от туда "Знать путь и пройти его это не одно и тоже"
А при чём тут это, и при чём тут матрица, то что я писал, не имеет никакого отношения к приведённой тобой цитате. Я же не про путь писал, я писал про понимание сочетании команд, при том что часть из них я знаю как отдельное значение, а сочетание их вместе, нет.

если нужен конечный результат закажи его и не разводи флуд.
А что значит заказать? я же и так рассказал что мне конкретно требуется, и флуд, если я и развожу, то только потому, что меня провоцируют на него.

Интересно в какой программе пункты меню храняться в ini фаилах ??
Неужели програмёр (даже с малой буквы ;) ), такого не знает?
Это в браузере Opera!

Возьми хорошо написанную книгу по WinAPI, почитай недельку перед сном, будеш AutoIt набирать с выключенным монитором.
Это было серъёзно, или в шутку? потому что если в шутку, то могу ответить лишь так (тоже в шутку):
Возле ссылки Полезное сообщение, нужно было-бы приделать и ссылку такую - Бесполезное сообщение :laugh:

P.S:
А вообще, спасибо за советы, думаю кога-то, в далёком будущем, они мне и пригодятся, и думаю если бы я и планировал серъёзно начинать программировать, то уж точно не начинал бы с AotoIt (При всём уважении к этому проэкту, и поверь, оно есть).

bogomolv
21-07-2006, 06:39
Creat0R
Да-а-а, глянул твой скрип... Слов нет - одни буквы...
Надеюсь, ты сам все понял.

Я всю бурную и бесполезную переписку с тобой поудалял. Прошу это сделать и тебя.
Те проблемы, которые ты решаешь, - результат твоей фантастической безграмотности и не имеют никакого отношения к программированию и к AutoIt.

Creat0R
21-07-2006, 11:59
bogomolv
результат твоей фантастической безграмотности
Если не понимание в прграммировании, называется безграмотностью, то грамотных людей в нашем мире, очень и очень мало!

Большое спасибо за помощь! :beer: (это я серъёзно, без всякого сорказма).

ANGRO
22-07-2006, 00:54
Я тут людей спрашивал как получить данные сетевых соединений, вот как-то так

Dim $strComputer = "."
Dim $ret

$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
If Not @error = 0 Then
MsgBox(48, "Ошибка", "Не удалось соединиться со службой WMI")
EndIf
$colNicConfigs = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For $objNicConfig In $colNicConfigs
For $strIPAddress In $objNicConfig.IPAddress

$objNic = $objWMIService.Get("Win32_NetworkAdapter.DeviceID=" & $objNicConfig.Index)
$ret &= "-- " & "Имя: " & $objNic.NetConnectionID & @CRLF & _
"IP адрес: " & $strIPAddress & @CRLF & _
"Номер адаптера: " & $objNicConfig.Index & @CRLF
Next
Next
If $ret <> '' Then Msgbox(0,"Output", $ret )

ANGRO
22-07-2006, 01:52
думаю если бы я и планировал серъёзно начинать программировать, то уж точно не начинал бы с AotoIt
Думаю это бан с высылкой своп фаила на мыло. По крайней мере с моей стороны.




© OSzone.net 2001-2012