Что нового

Некоректно работает FileOpen

Статус
Закрыто для дальнейших ответов.

bulldog5293

Знающий
Сообщения
172
Репутация
9
Есть код
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$_1 = GUICreate("NAC", 192, 223, -1, -1)
GUICtrlCreateLabel("логин", 84, 54, 62, 20)
$answer = GUICtrlCreateInput("", 20, 147, 150, 21)
GUICtrlCreateLabel("Password", 76, 87, 62, 20)
$passwd = GUICtrlCreateInput("", 4, 52, 62, 21)
$Adress = GUICtrlCreateInput("", 4, 80, 62, 21)
$Button_add = GUICtrlCreateButton("add", 119, 176, 62, 23, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Start", 55, 178, 62, 21, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("адрес", 16, 120, 34, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$file = FileOpen("test.ini", 1)
$var = StringAddCR($answer)
$var1 = StringAddCR($passwd)
FileWriteLine($file, "[test]")
FileWriteLine($file, $var)
FileWriteLine($file, $var1)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
Case $Button2
_Otvet()
	EndSwitch
WEnd

Его задача считать данные с окна и записать в test.ini, но вместо данных у меня цифры, хотелось бы знать в чём я ошибся
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
bulldog5293 [?]
Его задача считать данные с окна и записать в test.ini, но вместо данных у меня цифры, хотелось бы знать в чём я ошибся
1. Ты пытаешься записать вместо текста элемента Input - его цифровой идентификатор
Текст в элементе это :
Код:
$sAnswer=GUICtrlRead ( $answer)
$sPassword=GUICtrlRead ($passwd)


2. Для записи в ИНИ-файл есть специальные функции :
Код:
IniWriteSection ( "filename", "section", "data" [, index ] )
IniWrite ( "filename", "section", "key", "value" )
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
Так тоже пробывал, тоже ошибка
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Примерно так :
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$_1 = GUICreate("NAC", 192, 223, -1, -1)
GUICtrlCreateLabel("логин", 84, 54, 62, 20)
$answer = GUICtrlCreateInput("", 20, 147, 150, 21)
GUICtrlCreateLabel("Password", 76, 87, 62, 20)
$passwd = GUICtrlCreateInput("", 4, 52, 62, 21)
$Adress = GUICtrlCreateInput("", 4, 80, 62, 21)
$Button_add = GUICtrlCreateButton("add", 119, 176, 62, 23, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Start", 55, 178, 62, 21, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("адрес", 16, 120, 34, 17)

GUISetState()

$sFileIni = @ScriptDir & "\test.ini"

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Button_add
         IniWrite ( $sFileIni, "test", GUICtrlRead ( $answer), GUICtrlRead ( $passwd) )
      Case $Button2
         MsgBox(0,'GUICtrlRead ( $answer)',GUICtrlRead ( $Adress) & @CRLF & GUICtrlRead ( $answer) & @CRLF & GUICtrlRead ( $passwd))
    EndSwitch
WEnd


Приведи в соответствие друг другу элементы Input и соответствующие им элементы Label. Они похоже попутаны
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Для записи и считывания ini файлов есть спец. функции -
Код:
IniRead()
IniWrite()

Почитай в хелпе про них, или последуй за ссылками.


Добавлено:
Сообщение автоматически объединено:

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

читай хелп.


Добавлено:
Сообщение автоматически объединено:

да и вообще
Код:
читай хелп!
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
На форуме в принцепе принято в 4-х случаях задавать вопрос:
1)если не смотрел справку
2)смотрел, но ненашёл
3)нашёл, но не понял как делать
4)решил развить более обширно понять
За создания двух веток извеняюсь, проблемы с нетом были, но меня всё же интересует почему у меня вместо того что я вписываю появляются в .ini файле цифры 4 и 6, в справке подробного материала нет, гуглить запарился, прошу помочь :-\
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
bulldog5293
перечитай мой пост. я там написал в чем твоя ошибка и что это за цифры. ты заносишь в ини файл не значения того, что внутри инпутов, а их внутренний идентификатор - уникальное число или адрес, через который идет обращение к тому или иному контролу. для того, чтобы получить именно значение - его нужно считать. для этого служит функция - GUICtrlRead().

bulldog5293 [?]
На форуме в принцепе принято в 4-х случаях задавать вопрос:
1)если не смотрел справку
я думаю это твой случай. без обид. а еще, тебе тут тоже ответили. причем с уже готовым кодом.
http://autoit-script.ru/index.php?topic=1351.msg9757#msg9757
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
ну сменилось с 4 и 8 на 4 и 6 и толку, я с ней что в том году мучался, что в этом. В AutoIt3\Examples\Helpfile есть файл StringRegExpGUIPattern, в нём
Код:
If FileExists(@ScriptDir & "\StringRegExpGUIPattern.ini") = 0 Then
		$h_x = FileOpen(@ScriptDir & "\StringRegExpGUIPattern.ini", 1)
		FileWriteLine($h_x, "[do not delete the file - Patterns are listed below]")
		FileWriteLine($h_x, "(.*)##~##")
		FileClose($h_x)

который я как понимаю швыряит в .ini то что при запуске в гуи запишиш, но дадумать до канца немогу, всё равно у меня не получается, хоть скрипт как работать заставить нармально подскажите хотябы здес:wacko:
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
:wacko: почему даже как я только не переделывал скрипт пишутся тока 4 и 6 либо 4 и 8, а не те данные что вводятся и всё. Я не хочу флуд развадить, а просто прошу помощи, ну не вижу я где ошибка, а если вижу то не понимаю как её исправить :-X
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
bulldog5293 сказал(а):
почему даже как я только не переделывал скрипт пишутся тока 4 и 6 либо 4 и 8, а не те данные что вводятся и всё
Потому что записывать надо не :
Код:
$var = StringAddCR($answer)
$var1 = StringAddCR($passwd)

а
Код:
$var = GUICtrlRead ( $answer )
$var1 = GUICtrlRead ( $passwd )
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
bulldog5293
ну все, разбирайся сам. раз уж игнорируешь все рекомендации. вот тебе брутальный код :D
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$sINI = @ScriptDir & '\test.ini'
$_1 = GUICreate("NAC", 192, 223, -1, -1)
GUICtrlCreateLabel("логин", 84, 54, 62, 20)
$answer = GUICtrlCreateInput("", 20, 147, 150, 21)
GUICtrlCreateLabel("Password", 76, 87, 62, 20)
$passwd = GUICtrlCreateInput("", 4, 52, 62, 21)
$Adress = GUICtrlCreateInput("", 4, 80, 62, 21)
$Button_add = GUICtrlCreateButton("add", 119, 176, 62, 23, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Start", 55, 178, 62, 21, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("адрес", 16, 120, 34, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Button2
			_Otvet()
    EndSwitch
WEnd

Func _Otvet()
	IniWrite($sINI, 'test', 'login', GUICtrlRead($answer))
	IniWrite($sINI, 'test', 'password', GUICtrlRead($passwd))
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Код:
StringAddCR

это же просто добавление символа возврата каретки

Если тебе уж очень хочется через FileOpen то вот то же самое:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$_1 = GUICreate("NAC", 192, 223, -1, -1)
GUICtrlCreateLabel("логин", 84, 54, 62, 20)
$answer = GUICtrlCreateInput("login", 20, 147, 150, 21)
GUICtrlCreateLabel("Password", 76, 87, 62, 20)
$passwd = GUICtrlCreateInput("123456", 4, 52, 62, 21)
$Adress = GUICtrlCreateInput("", 4, 80, 62, 21)
$Button_add = GUICtrlCreateButton("add", 119, 176, 62, 23, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Start", 55, 178, 62, 21, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("адрес", 16, 120, 34, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button_add
        
        Case $Button2
            $file = FileOpen("test.ini", 2)
            ;$var = StringAddCR($answer)
            ;$var1 = StringAddCR($passwd)
            $var = GUICtrlRead ( $answer )
            $var1 = GUICtrlRead ( $passwd )
            FileWriteLine($file, "[test]")
            FileWriteLine($file, "Login=" & $var)
            FileWriteLine($file, "Passvord=" & $var1)
            FileClose($file)
      EndSwitch
WEnd


Но это сложнее же чем через Ф-ии ИНИ

Я уже говорил что у тебя элементы Input не совпадают с надписями в элементах Label
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
gregaz [?]
Но это сложнее же чем через Ф-ии ИНИ
а что делать, если в ини файле больше секции чем записываются при Case $Button2? ;)
они все сотрутся. преимущество ini-функций в том, что они обновляют только те ключи к которым обращаются.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Kaster сказал(а):
gregaz [?]
Но это сложнее же чем через Ф-ии ИНИ
а что делать, если в ини файле больше секции чем записываются при Case $Button2? ;)
они все сотрутся. преимущество ini-функций в том, что они обновляют только те ключи к которым обращаются.
Ну хочет человек через FileOpen и все тут
Не поймет ведь потом еще надо будет читать то ,что записано
А это уже будет совсем не просто

А показал я ему для того чтобы он все-таки понял почему него пишутся цифры а не текст
На своем примере может понятнее будет
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
gregaz почему четать потом не просто, ведь если при добавление повесить функцию FileClose и потом при FileWrite снова открыть разве с эти возникнут проблемы? И да спс, поставил бы плюсик да сестема не даёт :IL_AutoIt_1:
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
bulldog5293 сказал(а):
gregaz почему четать потом не просто, ведь если при добавление повесить функцию FileClose и потом при FileWrite снова открыть разве с эти возникнут проблемы? И да спс, поставил бы плюсик да сестема не даёт :IL_AutoIt_1:
Потому,что ИНИ- ф-я позволяет прочитать сразу конкретно :
значение Login'a
Код:
$sLogin=IniRead ( "filename", "Test", "Login", "default" )

или : значение : Passvord'a
Код:
$sPassvord=IniRead ( "filename", "Test", "Passvord", "default" )

А через FileOpen ты можешь читать толко по строкам и потом выбирать где логин а где Пассворд
А если записей будет много ?

Не изобретай велосипед ( с квадратными колесами)
ИНИ-ф-ии специально разработаны для этого
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
Ясна, ну не подойдёт она так придумаю уже как через ИНИ- ф-ю общатся
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 243
Репутация
2 345
Kaster
Почему ты не приклеил обе темы (вообще то одну из них нужно было сразу прибить, ту что поновее)? ...
 
Статус
Закрыто для дальнейших ответов.
Верх