Что нового

можно ли и присвоить 2 значения в ini?

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Еще раз добрый день.
Суть вопроса:
возмолжно ли и как реализовать присвоение двух или более значений одному параметру в INI-файле?
что то вроде:

[setup]
123=текст 123, новый текст 123, еще один текст 123

Причина изврата - создание программы, написание автозаполнялки адресов. создается некая база там есть адрес и адресат.
Изначально, по ряду причин, был уверен что по 1 адресу будет лишь один адресат, оказалось - до 5 и более.
При одном - все просто: выхватывается адрес, и автоматом подставляется адресат.

При 2 и более возникает 2 проблемы:
- куда в какую секцию этих адресатов собирать.
- как их выбирать при автозаполнении.

Помогите, в идеале скриптом, ну или мыслью - как ЭТО организовать? я пока вообще не предавтляю.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Добрый день.
Можно.
После знака "=" вы можете писать любое значение. Пусть даже оно включает в себя массив.
Единственное, вы должны понимать, что стандартные функции будут возвращать все, что после знака "=", как одно значение.
Потому Вам нужно будет разбирать это значение на отдельные.
 
A

Alofa

Гость
Вариант:
Код:
[Адрес]
   1 = Адресат_1
   2 = Адресат_2
   3 = Адресат_3
Здесь вам абсолютно не важно какие будут имена параметров, берите только их значения.
 
Автор
В

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Alofa сказал(а):
Вариант:
Код:
[Адрес]
   1 = Адресат_1
   2 = Адресат_2
   3 = Адресат_3
Здесь вам абсолютно не важно какие будут имена параметров, берите только их значения.

или я что то не понял или как?
в моей голове из этого примера 1,2,3 - это Адреса, а Адресаты это - Адресаты (получатели).
и вот беда то в том, что 1=2=3 бывает,а адресаты - разные.
как то бы если бы было бы так бы:
Код:
[Адрес]
   1 = Адресат_1, Адресат_2, Адресат_3
и чтоб в самом поле, куда попадает Адресат, можно было б стрелками полистать бы....
У меня сейчас файл этот ИНИ самозаполняется. в итоге выгляди так:
Код:
Opt("WinTitleMatchMode", 2)

WinActivate ("Бандероль", "Поиск")

$head = "Бандероль"

While 1

$i=0
While $i < 10

$hWnd = WinWait($head, "Поиск", 5)
$sControl = ControlGetFocus($hWnd)

If $sControl = "TDBEdit2" Then
$Text = ControlGetText($head, "Поиск", "TDBEdit3")
$i = 20
EndIf
WEnd

While IniRead ("data.ini", "setup", $Text, "default") = "default"

$hWnd = WinWait($head, "Поиск", 5)
$sControl = ControlGetFocus($hWnd)

If $sControl <> "TDBEdit2" Then
	IniWrite ( "data.ini", "setup", $Text, ControlGetText($head, "Поиск", "TDBEdit2"))
	EndIf

WEnd

ControlSetText ($head, "Поиск", "TDBEdit2", IniRead ("data.ini", "setup", $Text, "default"))

Sleep(100)

WEnd

работает нормально!!!!!!!!!! и файл формирует ИНИ - сам, беда одна - по одному адресу может быть лишь 1 получатель... незнаю как это обойти.


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

что то на основе: StringSplit должно быть, как мне кажется....
если в качестве строки адреса писать:

[Адрес]
1 = Адресат_1|Адресат_2|Адресат_3


как то так?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ВиталийВВ
на основе: StringSplit
Код:
GUICreate("Example")
$cmb = GUICtrlCreateCombo("", 10, 10, 100, 30)
GUISetState()

$str = IniRead("1.ini", "Адрес", "1", "")
$arr = StringSplit($str, "|")

For $i = 1 To $arr[0]
  GUICtrlSetData($cmb, $arr[$i], $arr[1])
Next

Do
Until GUIGetMsg() = -3
 
Автор
В

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
да, что то типа этого.
а можно ли не в виде этого выводить варианты выбора, а прямо в поле TDBEdit2 чтоб стрелками PageUP/PageDown?
по идее как должно быть:
по умолчанию вставляется уже готовое значение из файла ИНИ (изначально единственное), но чтоб, нажав PageDown получили бы пустую строку,(в этом поле ввода) ввели новое значение, и оно б после покидания этого поля добавилось бы в ИНИ через разделитель.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ВиталийВВ
Если я правильно понял, то так
Код:
#include <Misc.au3>

$sText = "Начальное значение"

$hWnd = WinWaitActive("Заменить")
ControlSetText($hWnd, "", "Edit1", $sText)
$sText = ""

While ControlGetFocus($hWnd) = "Edit1"
  If _IsPressed("22") Then
    $sText &= ControlGetText($hWnd, "", "Edit1") & "|"
    ControlSetText($hWnd, "", "Edit1", "")
    Do
      Sleep(11)
    Until Not _IsPressed("22")
  EndIf
  Sleep(11)
WEnd
If ControlGetText($hWnd, "", "Edit1") <> "" Then $sText &= ControlGetText($hWnd, "", "Edit1") & "|"

IniWrite("data.ini", "setup", "1", StringTrimRight($sText, 1))
Это пример для поля "Что" в окне "Заменить" блокнота (запустить notepad.exe, нажать Ctrl+H).
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Постараюсь помочь мыслью )
База данных предполагает наличие для каждой таблицы уникального ключевого поля, которое в пределах таблицы не повторяется.
Каждый адресат имеет свой уникальный номер, ФИО и адрес, причем ФИО и адрес могут совпадать с другими (полные тезки или проживают по одному адресу), но номер всегда уникален.
Далее select'ы из базы по любому из параметров.
 
Верх