![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск символа в строке. [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....