Что нового

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

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

bulldog5293

Знающий
Сообщения
172
Репутация
10
Есть код
Код:
#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" )
 

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
Репутация
626
Для записи и считывания ini файлов есть спец. функции -
Код:
IniRead()
IniWrite()

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


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

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

читай хелп.


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

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

bulldog5293

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

kaster

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

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

bulldog5293

Знающий
Сообщения
172
Репутация
10
ну сменилось с 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
Репутация
10
: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
Репутация
626
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
Репутация
626
gregaz [?]
Но это сложнее же чем через Ф-ии ИНИ
а что делать, если в ини файле больше секции чем записываются при Case $Button2? ;)
они все сотрутся. преимущество ini-функций в том, что они обновляют только те ключи к которым обращаются.
 

gregaz

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

Ну хочет человек через FileOpen и все тут
Не поймет ведь потом еще надо будет читать то ,что записано
А это уже будет совсем не просто

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

bulldog5293

Знающий
Сообщения
172
Репутация
10
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
Репутация
10
Ясна, ну не подойдёт она так придумаю уже как через ИНИ- ф-ю общатся
 

CreatoR

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