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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 23:35   #1
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию Постепенная обработка текста

Имеется текст вида "_105_204_321_847_247_132", нужно каждое число обработать по отдельности, например:
105*0.5;
204*0.5;
321*0.5;
и т.д.
умножение на 0.5 в данном случае только пример, на самом деле обарботка большая, просто надо как то числа, разделенные знаком "_", вырезать по отдельности.
Kib вне форума Ответить с цитированием
Старый 21.04.2009, 23:44   #2
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

1. Могу посоветовать использовать метод pos(). С его помощью можно найти расположение первого знака "_", а там уже от него отталкиваться.

2. Если все числа только из 3х цифр, то тут уже просто арифметика: первые 3 символа - число, 4 - "_".
JamS007 вне форума Ответить с цитированием
Старый 21.04.2009, 23:51   #3
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

К сожалению числа не только из 3х цифр
Kib вне форума Ответить с цитированием
Старый 21.04.2009, 23:59   #4
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

тогда 1-й метод... Сори, но исходник писать щас нет времени, могу только натолкнуть на мысль:

1. Узнаем положение знака "_". методом Pos(); (Его описание есть, метод достаточно распространенный).

2. Если "_" первый знак в тексте, то его пропускаем, опять используем Pos() чтоб узнать положение второго знака "_".

3. Нашли. Слева от него будет число, причем количество символов в нем, будут = положение второго знака "_" - положение первого знака "_".

4. Считываем число, обрабатываем.

P.S. Знаю, читается устрашительно, но ничего очень трудного нет. Можно для этого дела использовать цикл. Ну там уже как захочешь.
JamS007 вне форума Ответить с цитированием
Старый 22.04.2009, 00:08   #5
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

А как пропускать знаки "_" которые уже пройдены?
Я имею ввиду если написать Pos('_',str); , то он всегда будет находить первый знак.
Проще говоря как найти положение второго знака "_"?
Kib вне форума Ответить с цитированием
Старый 22.04.2009, 00:18   #6
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

можно использовать буфер (понимаю - слово ужасное, но не пугайся ). Как буфер можно использовать например компонент Memo, в который скопировать весь текст, е обработанные части просто удалять. Это даже в некоторой мере ускорит работу программы.

Но я не гарантирую что это самый надежный и правильный способ Когда то тоже такое делал, но что-то не могу вспомнить как я реализовал пропуск уже обработанных "_".
JamS007 вне форума Ответить с цитированием
Старый 22.04.2009, 07:49   #7
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Вот пример программки которая считает кол-во слов разделенных пробелом. думаю если ее немного переделать, то она подойдет для ваших целей.
Вложения
Тип файла: zip ДЗ2.zip (6.2 Кб, 13 просмотров)
S@fer вне форума Ответить с цитированием
Старый 22.04.2009, 08:27   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    m:array [1..10] of real;
    i:integer;
begin
  i:=1;
  s:='_105_204_321_847_247_132';
  while s<>'' do
  begin
   delete(s,1,pos('_',s));
   if pos('_',s)<>0 then m[i]:=strtofloat(copy(s,1,pos('_',s)-1))
   else
    begin
     m[i]:=strtofloat(s);
     s:='';
    end;
   inc(i);
  end;
end;
SERG1980 вне форума Ответить с цитированием
Старый 22.04.2009, 19:37   #9
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

То что нужно!!! Спасибо SERG1980!
Kib вне форума Ответить с цитированием
Старый 22.04.2009, 20:25   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Возмите Tstringlist,выставьте разделителем подчеркивание, и присвойсте свойству text вашу строку. У вас получится список строк. Вот и все...
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка текста JRcoker Общие вопросы Delphi 5 31.07.2008 23:35
обработка текста pvleo Фриланс 4 14.07.2008 05:19
Обработка текста Absent Помощь студентам 2 20.05.2008 23:17
Обработка текста Absent Помощь студентам 1 10.05.2008 19:56
Обработка текста GAGARIN-NEW Общие вопросы Delphi 7 06.10.2007 15:25