Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 10:52   #1
sergey[zel]
 
Регистрация: 14.06.2009
Сообщений: 3
По умолчанию присвоение значений переменным из строки

Мужики помогите реализовать..

есть например текстовая строка: 'a22.33 b2.2 c33 d55.333'
как мне прочитать числа стоящие за буквами и присвоить их соответствующим переменным ?.
sergey[zel] вне форума Ответить с цитированием
Старый 14.06.2009, 10:58   #2
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

нужно парсер написать. не удобная что то строка у вас
вот если бы 'a=22.33; b=2.2; c=33; d=55.333;' то мне кажется было бы проще.
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 14.06.2009, 11:01   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

для начала преобразовываешь строку в список

Код:
var l:TStrings;
s:String;
begin
s:='a22.33 b2.2 c33 d55.333';
l:=TStringList.Create;
s:=StringReplase(s, ' ', #13#10, [rfReplaseAll]);
//заменяем пробелы на пеернос строки
l.Text:=s;
дальше из полученого списка присваиваем значение переменным
Код:
a:=StrToFloat(Copy(l.Strings[0], 2, Length(l.Strings[0])))
(*
StrToFloat - преобразовываем строку в число с плавающей запятой
Copy - копируем строку начиная со второго символа.. потому что первый - буква...
l.Strings[0] - первая строчка в списке..
*)
b:=StrToFloat(Copy(l.Strings[1], 2, Length(l.Strings[1])))
c:=StrToFloat(Copy(l.Strings[2], 2, Length(l.Strings[2])))
d:=StrToFloat(Copy(l.Strings[3], 2, Length(l.Strings[3])))
//и так далее
end;
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 14.06.2009, 11:10   #4
sergey[zel]
 
Регистрация: 14.06.2009
Сообщений: 3
По умолчанию

спасибо за совет
да код криво генерится построцессором станка.., приходится корректировать его вручную, вот я и хотел упростить себе жизнь.
по сути мне надо убрать из строки все "Y с его значениями", перемножить значения X на 2, перед "(" скобками поставить ";", закоментировать их чтобы станок воспринимал это как коментарий.
Код:
%MPF99
N1 G40 G54 G71 G90 G17 G94
(TOOL: T1 External Insert-Holder)
(OPERATION: Rough Turning.1)
N2 G1 X6.55 Y0 Z28.5 S70. F60000.
N3 G95 X6.55 Y0 Z26.5 F.3
строк там может быть до 10000

Последний раз редактировалось Stilet; 15.06.2009 в 12:01.
sergey[zel] вне форума Ответить с цитированием
Старый 14.06.2009, 11:37   #5
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

sergey[zel] пользуйтесь кнопкой "правка"


сохрани тест в текстовый файл.. и дальше чтото на подобии такой процедуры:
Код:
var l:TStrings;
s:string;
i, n, k:integer;
f:Double;
begin
l:=TStringList.Create;
l.LoadFromFile('1.txt');
for i:=0 to l.Count-1 do
 begin
  if l.Strings[i][1]='('
   then l.Strings[i]:=';'+l.Strings[i]
   else begin
    s:=l.Strings[i];
    n:=Pos('Y', s);//позицыя буквы Y
    k:=PosEx(' ', s, n)+1;// окончание значения после этой буквы
    Delete(s, n, k-n);//удаляем лишнее..
//так же само удаляем цыфру после X
    n:=Pos('X', s)+1;
    k:=PosEx(' ', s, n);
    f:=StringToFloat(Copy(s, n, k));//копируем цыфру в переменную
    f:=f*2;
    Delete(s, n, k-n);
    Insert(FloattoStrinf(f), s, n);//вставляем новое значение
    l.Strings[i]:=s;
   end;
 end;
end;
если есть ошибки в коде.. то извеняюся.. писал прямо сдесь.. не проверял на правильность.. но вроде должно работать

Цитата:
строк там может быть до 10000
это скажется только на кскоросте обработки файла и на оперативе.. которую программа будет потреблять.. для уменьшения второго можна использовать другой метод открытия файла.. ну и чьение/запись строк соответственно.. я показал тока один из примеров как это можна реализовать


маленькие изменения в коде..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 14.06.2009 в 23:54. Причина: дополнитЪ захотелося
Ntlegend вне форума Ответить с цитированием
Старый 14.06.2009, 12:15   #6
sergey[zel]
 
Регистрация: 14.06.2009
Сообщений: 3
По умолчанию

Ntlegend, спасибо большое !
примного благодарен

все работает за исключением перемножения float на 2
пишет ошибку ..
может у кого есть готовый парсер типа:
float x=функция(строка, символ за которым стоит значение, символ до которого отчитывается длинна значения)

Последний раз редактировалось Stilet; 15.06.2009 в 12:00.
sergey[zel] вне форума Ответить с цитированием
Старый 15.06.2009, 12:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
да код криво генерится построцессором станка
Ниче тут кривого нет. Обычная программа станка.
Цитата:
пишет ошибку ..
Видать на японском раз ты текст не привел.
Цитата:
может у кого есть готовый парсер типа:
строку типа: N1 G40 G54 G71 G90 G17 G94
Можно раскидать в массив так:
Код:
var s:TStringList; n:Double;
begin
s:=TStringList.Create;
s.Delimiter:=' ';
s.DelimitedText:='N1 G40 G54 G71 G90 G17 G94';
// теперь строка с командами раскидана по "массиву"
// Далее указываешь какой элемент нужно взять и удали из него букву команды, превратив числовой параметр в число
n:=StrToFloatdef(copy(s[2],2,length(s[2])),0);

end;
Надеюсь смысл понятен
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение значений в ComboBox maxi_mum Помощь студентам 6 09.04.2009 12:48
Задача переменным значений для разных Item-ов Combobox-а Stalker209 Общие вопросы C/C++ 0 24.03.2009 12:22
Извлечь в одну ячейку несколько значений из строки которые удовлетворяют заданному условию. Dorvir Microsoft Office Excel 5 08.04.2008 16:12
Присвоение переменным булевских выражений rider Паскаль, Turbo Pascal, PascalABC.NET 4 06.12.2007 21:11