Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21

Присвоение значения в combobox из файла

27.01.2016, 21:18. Показов 4027. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть файл конфигурации к игре .txt:

#################
#### Quality ####
#################
#1-Very low
#2-Low
#3-Medium
#4-Hight
#5-Ultra
Quality 4

##################
#### Distance ####
##################
#1-Very low
#2-Low
#3-Medium
#4-Hight
#5-Ultra
Distance 3

Как реализовать чтение и последующи отображение значения Quality, 4, в Combobox?
И запись, сохренение в файл при смене етого значения в Combobox'е?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2016, 21:18
Ответы с готовыми решениями:

Ввод файла и присвоение значения переменной
Добрый вечер! Хотелось бы для себя прояснить нюансы, связанные с вводом файла и присвоением его содержимого переменной. Итак: 1)...

Присвоение переменной значения из текстового файла
Доброго дня. есть текстовый файл, подскажите, пожалуйста, как присвоить переменной значение, которое находится в первой строчке 13-е по...

Присвоение переменной значения, взятого из txt-файла
Нашел похожие темы,но они не помогли,а именно: for /f "user=3" %%a in ("logs.txt") do (echo %%~a) Т.е. чтение 3-й строки и присваивание...

44
86 / 86 / 24
Регистрация: 27.02.2010
Сообщений: 397
27.01.2016, 22:59
Если файл стандартизированного формата, то нужно парсить.
Регулярные выражения, индексный поиск и т.д.
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
28.01.2016, 09:37  [ТС]
Можете дать какой-то пример? Чтобы помог мне все разжевать.
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
28.01.2016, 09:52
Лучший ответ Сообщение было отмечено Klensal как решение

Решение

Грузите ваш файл в переменную-объект типа TStringList. Идёте циклом по всем строкам.
Каждую строку копируете во временную переменную типа String, попутно сделав Trim().
Смотрите какой символ - если "#" - то вся стока комментарий, пропускаем.
Иначе бьём через вторую переменную-объект типа TStringList как TStringList.DelimitedText выставив TStringList.Delimiter как пробел.

Добавлено через 5 минут
А там уже сравниваете первый получившийся элемент со строковыми константами - Quality и прочие. Во втором ожидаете значение.
1
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
28.01.2016, 09:53
Цитата Сообщение от BOGG ART Посмотреть сообщение
Смотрите какой символ - если "#" - то вся стока комментарий, пропускаем.
не пропускаем, а добавляем в Combobox
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
28.01.2016, 10:04
Надо пропускать, читать тока что Quality равно 4 - и ставить такой индекс соотв. ComboBox'у.
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
28.01.2016, 11:15  [ТС]
BOGG ART,
Вы все верно поняли. Спасибо, буду пробовать.
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
30.01.2016, 21:22  [ТС]
Полазив по форумам, и бегло ознакомившись с литературой у меня пока получилось только это:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
setting:=TStringList.Create;
    setting.LoadFromFile('Settings.txt');
       for i:=Setting.Count-1 downto 0 do
        if Length(trim(Setting.Strings[i]))=0
          then
          Setting.Delete(i);
 
       for i:=Setting.count-1 downto 0 do
        if pos('#', Setting.Strings[i])=1
           then
           Setting.Delete(i);
       memo2.Text:=Setting.text; // смотрю что получилось
В мемо получаю строки с значениями через пробел:

renderWidth 1366
renderHeight 768
presentWidth 0
presentHeight 0
aaQuality 0
aaType SMAA
ssaoStrength 0
ssaoScale 3
ssaoType VSSAO2
dofOverrideResolution 810

Но вот с TStringList.Delimiter ничего понять не могу, как его сюда прицепить?
И самое главное, как потом с чекбокса все записать обратно, я запутался.
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
30.01.2016, 22:05
Цитата Сообщение от Klensal Посмотреть сообщение
Но вот с TStringList.Delimiter ничего понять не могу, как его сюда прицепить?
никак не цепляй
и пропуски не удаляй

загрузил в StringList и пошел в цикле сверху вниз
если ## - пропускаем
если # - то копируем цифру после # в комбобокс
если не # и не пробел - то копируем в комбобокс и выставляем активным
если пробел то следующий комбобокс

для сохранения ты можешь или заново сформировать этот файл (так проще - ведь все значения у тебя уже есть), или опять читать его и уже сравнивать с теми данными что есть
1
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
30.01.2016, 23:01  [ТС]
Я так понимаю BOGG ART советовал метод, при котором комбобоксу присваивалось значение конкретного значения. А вы советуете способ, при котором все комбобоксы заполняются в произвольном порядке. Просто мне надо не просто значение взять, а чтобы "курица 2", "слон 3", записались в соответствующие вкомбобоксы с лейблами курица и слон. Или я ошибаюсь?
Если не трубно дайте шаблончик, с которым я бы мог разобраться а то мне самому долго разбираться с нюансами.
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
30.01.2016, 23:59
Цитата Сообщение от Klensal Посмотреть сообщение
А вы советуете способ, при котором все комбобоксы заполняются в произвольном порядке.
произвольном? у вас цикл сверху вниз
заголовок можно считать после ####, если есть заголовок значит можно записать туда куда нужно
Цитата Сообщение от Klensal Посмотреть сообщение
Просто мне надо не просто значение взять, а чтобы "курица 2", "слон 3", записались в соответствующие вкомбобоксы с лейблами курица и слон
анализируйте соответствующий раздел файла и пишите
Цитата Сообщение от Klensal Посмотреть сообщение
##################
#### Distance ####
##################
Цитата Сообщение от Klensal Посмотреть сообщение
Если не трубно дайте шаблончик
если скинете полностью файл и скрин своей формы, то завтра с утро попробую что-то сделать
1
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
31.01.2016, 01:13  [ТС]
Теперь я вроде понял. Но как то реализовать не очень представляю.
Буду благодарен за помощь.
Вложения
Тип файла: 7z 1.7z (20.9 Кб, 7 просмотров)
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
31.01.2016, 04:24
Klensal,

Сделано с учетом позиций символов и строк в Вашем конкретно приведенном файле.
Может и сумбурно...
Вот код:
Delphi
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var
  Form1: TForm1;
   List:Tstringlist;
   W1,W2 :string;
implementation
 
{$R *.dfm}
 
procedure TForm1.ComboBox1Change(Sender: TObject);
 
Var
i,j:Integer;
begin
    for i :=0 to List.Count-1 do
    begin
      if Pos('Quality',List[i])=1 then
      begin
       List[i]:=StringReplace(List[i],W1, IntToStr(ComboBox1.ItemIndex+1),[rfReplaceAll, rfIgnoreCase]);
      end;
    end;
 
    List.SaveToFile( 'Ваш файл.');
end;
 
procedure TForm1.ComboBox2Change(Sender: TObject);
Var
i,j:Integer;
begin
   for i :=0 to List.Count-1 do
    begin
      if Pos('Distance',List[i])=1 then
      begin
       List[i]:=StringReplace(List[i],W2, IntToStr(ComboBox2.ItemIndex+1),[rfReplaceAll, rfIgnoreCase]);
      end;
    end;
 
    List.SaveToFile('Ваш файл.');
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 List.Free;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
Var
i,j:Integer;
begin
  List :=TStringList.Create;
  List.LoadFromFile('Ваш файл');
  for i :=0 to List.Count-1 do
  begin
     if Pos('Quality',List[i])=1 then
     begin
        for j:=i-5  to i-1 do
          begin
            ComboBox1.Items.Add(Copy(List[j],4,8));
          end;
        W1:= Copy(List[i],9,1) ;
        ComboBox1.text:= ComboBox1.Items[StrToInt(W1)-1];
         end;
 
     if Pos('Distance',List[i])=1 then
     begin
        for j:=i-5  to i-1 do
          begin
            ComboBox2.Items.Add(Copy(List[j],4,8));
          end;
         W2:=Copy(List[i],10,1 );
        ComboBox2.text:= ComboBox2.Items[StrToInt(W2)-1];
         end;
 
  end;
end;
end.
Удачи Вам.
1
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
31.01.2016, 10:42
Klensal, а вам весь файл нужно разобрать, или же только то что в заголовке темы?

Добавлено через 42 секунды
в Combobox пишем только текущие значения, или же все возможные?

Добавлено через 1 минуту
при сохранении файла комментарии нужны? или только нужные переменные?
1
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
31.01.2016, 15:25  [ТС]
Narimanych
Спасибо, буду пробовать.

qwertehok,
Нужно извлечь все значения из файла.
Комбобокс должен отображать текущие, активное значение с возможностю сменить на другое возможное.
Сохранить файл со всеми коментариями (в идеале). Щас буду пробовать вариант Narimanych.
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
31.01.2016, 15:41
Я советовал в предположении что все данные в файле одного вида, как в примере первого поста.
Учитывая
Цитата Сообщение от Klensal Посмотреть сообщение
В мемо получаю строки с значениями через пробел:
...
...
это не совсем так, и потребуются некоторые изменения в логике.

Я посмотрю пример файла и отвечу, но позже - на работе срочной сейчас.
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
31.01.2016, 17:40
Цитата Сообщение от Klensal Посмотреть сообщение
Щас буду пробовать вариант Narimanych.
его вариант только для 2х значений

вы можете задание полностью раскрыть? вам точно нужно ЧИТАТЬ значение из файла? может только формировать его с нуля?
0
0 / 0 / 0
Регистрация: 27.01.2016
Сообщений: 21
31.01.2016, 18:26  [ТС]
qwertehok,
его вариант только для 2х значений
А по аналогии не можно добавить остальние?

Да, нужно именно читать значения. Ибо сли формировать фал с нуля, особенно изменяя строки, то он не работает.
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
31.01.2016, 19:17
Цитата Сообщение от Klensal Посмотреть сообщение
А по аналогии не можно добавить остальние?
в том то и дело что формат файла разный
и проблема в то что он СОВСЕМ разный

Цитата Сообщение от Klensal Посмотреть сообщение
Ибо сли формировать фал с нуля, особенно изменяя строки, то он не работает.
что то вы гоните
0
5967 / 4543 / 1094
Регистрация: 29.08.2013
Сообщений: 28,160
Записей в блоге: 3
31.01.2016, 20:39
вот вам exe файл
положите файл с настройками рядом - он прочитает

кстати, на форме около 10 компонентов - 2,3 метра
Вложения
Тип файла: 7z Project1.7z (657.6 Кб, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2016, 20:39
Помогаю со студенческими работами здесь

Парсинг XML, присвоение значения Qdoublespinbox из файла
Здравствуйте, В GUI у меня есть несколько Qdoublespinbox'ов, хочу присваивать значения этим боксам при запуске с .xml, который будет...

Присвоение переменным массива значения байтов из файла
BinaryReader lol = new BinaryReader(File.Open(@"D:\ddvbwq.txt", FileMode.Open)); byte bob = cba.ReadByte(); Console.WriteLine(bob); ...

Присвоение значения переменной из строки другого файла
Есть текстовый файл в сетевой папке \\ServerShara\1.txt Как скрипту VBS взять значение для переменных допустим strText1 = 1ая строка...

Присвоение переменной в качестве значения первой строки файла
cmd подскажите каким образом написать присвоение переменной значения из файла. Есть текстовый файл, в первой строке которого стоит...

Присвоение переменной значения, находящегося в определённой строке заданного файла
Файл с паролем расположен по пути /home/omp/rdb/SYSDBA.password (таких файлов всего 30 штук, пароли различны). Пароли могут различаться и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru