Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск символа в строке. [D7, XP]


WestBronx ©   (2006-01-27 13:53:00) 

Привет, пытаюсь написать конфиг для программы, проблемма в следующем.
Скажем есть переменная n, типа string, со значением "time=55".
Подскажите, как обрезать все символы до "=" (т.е. time), занести их во временную переменную q, далее, обрезать значение после знака "=" (т.е. 55), занести в переменную w.


WestBronx   (2006-01-27 21:29:00) [1]

Спасибо всем за ответы, но dabreezy мне уже помог ;)
Всё равно спасибо за проявленный интерес ;)


Glex   (2006-01-27 20:28:00) [2]

TIniFiles example:


uses IniFiles;
....
procedure TForm1.FormCreate(Sender: TObject);
var Ini: TIniFile;
begin
 ProgName:= Application.Title;
 Ini := TIniFile.Create('bkrnd.ini');
 try
 Settings.FormLeft:= Ini.ReadInteger('Interface','Form1.Left', 800);
 Settings.FormTop:= Ini.ReadInteger('Interface', 'Form1.Top', 100);
 if Settings.FormLeft>Screen.WorkAreaWidth-Form1.ClientWidth then Settings.FormLeft:=Screen.WorkAreaWidth-Form1.ClientWidth;
 if Settings.FormTop>Screen.WorkAreaHeight-Form1.ClientHeight then Settings.FormTop:=Screen.WorkAreaHeight-Form1.ClientHeight;
 Settings.Skin:= Ini.ReadInteger('Interface', 'Skin', 0);
 Settings.Lang:= Ini.ReadInteger('Interface', 'Lang', 0);
 Settings.AlphaBlendValue:= Ini.ReadInteger('Interface', 'AlphaBlendValue', 220);
 Settings.AlphaBlend:= Ini.ReadBool('Interface', 'AlphaBlend', false);
 Settings.StayOnTop:= Ini.ReadBool('Interface', 'StayOnTop', true);
 Settings.RandomizerSettings.TwoA:= Ini.ReadBool('Randomizer Settings', 'TwoA', false);
 Settings.RandomizerSettings.AI:= Ini.ReadBool('Randomizer Settings', 'AI', true);
 Settings.RandomizerSettings.ThreeD:= Ini.ReadBool('Randomizer Settings', 'ThreeD', false);
 Settings.MiniMode:= Ini.ReadBool('Interface', 'MiniMode', false);
 Settings.RandomizerSettings.AutoGen:= Ini.ReadBool('Randomizer Settings', 'AutoGen', false);
 Settings.RandomizerSettings.AutoGenTime:= Ini.ReadInteger('Randomizer Settings', 'AutoGenTime', 750)
 finally
   Ini.Free;
 end;
 Form1.DoubleBuffered:= true;
end;
....
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var Ini: TIniFile;
begin
RefreshSettings;
Ini := TIniFile.Create('bkrnd.ini');
try
 Ini.WriteInteger('Interface', 'Form1.Top', Top);
 Ini.WriteInteger('Interface', 'Form1.Left', Left);
 Ini.WriteInteger('Interface', 'Skin', Settings.Skin);
 Ini.WriteInteger('Interface', 'Lang', Settings.Lang);
 Ini.WriteInteger('Interface', 'AlphaBlendValue', Settings.AlphaBlendValue);
 Ini.WriteBool('Interface', 'MiniMode', Settings.MiniMode);
 Ini.WriteBool('Interface', 'AlphaBlend', Settings.AlphaBlend);
 Ini.WriteBool('Interface', 'StayOnTop', Settings.StayOnTop);
 Ini.WriteBool('Randomizer Settings', 'TwoA', Settings.RandomizerSettings.TwoA);
 Ini.WriteBool('Randomizer Settings', 'AI', Settings.RandomizerSettings.TwoA);
 Ini.WriteBool('Randomizer Settings', 'ThreeD', Settings.RandomizerSettings.TwoA);
 Ini.WriteBool('Randomizer Settings', 'AutoGen', Settings.RandomizerSettings.AutoGen);
 Ini.WriteInteger('Randomizer Settings', 'AutoGenTime', Settings.RandomizerSettings.AutoGenTime);
finally
 Ini.Free;
 end;
end;


Собственно, Ini-Файл:
[Interface]
Form1.Top=246
Form1.Left=373
Skin=0
Lang=0
AlphaBlendValue=245
MiniMode=0
AlphaBlend=1
StayOnTop=1
[Randomizer Settings]
TwoA=1
AI=1
ThreeD=1
AutoGen=1
AutoGenTime=5000


В коде немного нужного только моей проге, но, думаю, разберёшься ))


Бася   (2006-01-27 20:17:00) [3]

Как оказалось, действительно по теме. Если кого обидел - лично приношу извинения.


umbra   (2006-01-27 15:06:00) [4]

собственно по теме:


function ExtractValue(s, delimiter: string): string;
var
 DelimPos, ValueLen: integer;

begin
 DelimPos := LastDelimiter(delimiter, s);
 ValueLen := Length(s) - DelimPos;
 Result := RightStr(s, ValueLen);
end;
{....................................................}
val := ExtractValue(s, '=');
{....................................................}


Бася   (2006-01-27 14:34:00) [5]

Господа мы уходим от темы. Человек который только познаёт азы Дельфей, хочет понять но не может! Ему рациональней было бы изучить, чем копировать чужое, не понимая его сущность.

А на счет золотоых слов, то это истинная правда!
А хотя, эт Ваше право голоса, я всего лишь хотел помочь, и вселить в новичка силы!

До встречи!


umbra   (2006-01-27 14:26:00) [6]

2 WestBronx   (27.01.06 14:17) [9]

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


Johnmen   (2006-01-27 14:25:00) [7]

>Бася   (27.01.06 14:19) [11]
>Открой любую книгу по Паскаль, открой первые страницы и читай раз 20!
>Даю слово, запомнишь!

Золотые слова!


WestBronx   (2006-01-27 14:23:00) [8]

dabreezy   (27.01.06 14:19) [12]
Спасиб ;)


Бася   (2006-01-27 14:19:00) [9]

Не падай духом! Я сам новичок в программировании. Нигде не учился - все  сам!

Если не понимаешь, то это плохо...
Открой любую книгу по Паскаль, открой первые страницы и читай раз 20!
Даю слово, запомнишь!

Ну раз разговор пошёл....
Смотри...

Бросай на форму два компонента label, один компонент Edit1 и кнопку button1.

В обработчике для кнопки (клацни два раза на ней) пиши так:
procedure TForm1.Button1Click(Sender: TObject);
var
 i,d: integer;
 st: string;
begin
 st:= Edit1.Text; //в переменную st загоняем слово в Edit1.
 for i:=0 to length(st)do //от начала до конца строки...
 label1.Caption:=st; //в label1 перегоним переменную st...
 d:=Pos('test',st); //найдём в строке stб подстроку "test"
 label2.Caption:=IntToStr(d); //покажем номер позиции искомого фрагмента
end;

По такому принципу и шагай и всё у тебя получится! Главное - читай внимательно и пытайся. Научиться можно только программируя самос тоятельно!
Удачи!!! :))))))))


dabreezy   (2006-01-27 14:19:00) [10]

То что написал я его быстрее чем открыл бы справку :)
Тем более он работает


Johnmen   (2006-01-27 14:17:00) [11]

>dabreezy   (27.01.06 14:15) [8]

Что полезного можно вынести из этого "кода"?


WestBronx   (2006-01-27 14:17:00) [12]

umbra ©   (27.01.06 14:14) [7]
Свой написанный - ближе к сердцу %)
И разбираться далее легче.
Там по идеи пустяк написать.


dabreezy   (2006-01-27 14:15:00) [13]

Злые вы все :) Вот код:

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
 q,w: string;
 i,flag: byte;
begin
 s:='time=55';
 q:='';w:='';
 flag:=0;
 for i:=1 to length(s) do
   begin
     if (s[i]<>'=') and (flag=0) then q:=q+s[i];
     if (s[i]<>'=') and (flag=1) then w:=w+s[i];
     if (s[i]='=') then      flag:=1;
   end;
 //q=time   w=55

end;


umbra   (2006-01-27 14:14:00) [14]

В делфи специально для этого есть компонент TIniFile.


WestBronx   (2006-01-27 14:12:00) [15]

Johnmen ©   (27.01.06 14:08) [4]
F1, помогает только тогда, когда знаешь чего тебе конкретно нужно. В моём случаи он бесполезен.
"Помоги себе сам", что вы делаете с таким вероисповеданием на форуме для новичков? %) Да и вообще на форуме?


WestBronx   (2006-01-27 14:09:00) [16]

Johnmen ©   (27.01.06 14:01) [2]
Многие, но не те которые мне нужны в данном случаи =/
Можно по идеи разбить string на чар, и по байтно считать символы, как только попадаеться "=", обрезать. Но это слишком геморойно писать.
Может подскажите чего?


Johnmen   (2006-01-27 14:08:00) [17]

Помоги себе сам, спроси у F1.


WestBronx   (2006-01-27 14:07:00) [18]

Непонимаю, как этим воспользоваться, insert если не изменяет память вставляет строку в строку.

Может поможете кодом?


Johnmen   (2006-01-27 14:01:00) [19]

Какие операции со строковыми переменными ты уже знаешь?


Бася   (2006-01-27 13:55:00) [20]

Нужно применять функцию Pos, insert....


Наверх

Титульная страница Поиск, карта сайта Написать письмо