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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 12:06   #1
MSD
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 85
По умолчанию Работа с текстом

Добрый день мастера, подскажите пожалуйста по работе с текстом в котором есть разделители.... Например есть тест:
Саша,Маша, Гриша, Иван,Самолет,Степа
Опа,Жизнь, Гриша, Кирил, Кран, Автобус и.т.д.
строк много, как сделать так чтобы остался текст только между третьей и 4 запятой..? Пробелов может быть разное колличество между словами.... Спасибо!!!
MSD вне форума Ответить с цитированием
Старый 04.05.2009, 12:14   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну будет счетчик запятых.
Идете посимвольно по тексту. Пропускаете все пробелы.
Если встретили запятую - увеличиваем счетчик.
Если счетчик = 3, то при проходе пишем символы куда надо. Если счетчик = 4, то выходим.

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.05.2009, 12:17   #3
MSD
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Ну будет счетчик запятых.
Идете посимвольно по тексту. Пропускаете все пробелы.
Если встретили запятую - увеличиваем счетчик.
Если счетчик = 3, то при проходе пишем символы куда надо. Если счетчик = 4, то выходим.

Как-то так.
Я понимаю что как то так...)) А как реализовать... а новечек совсем...)
MSD вне форума Ответить с цитированием
Старый 04.05.2009, 12:36   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от MSD
А как реализовать... а новечек совсем...)
Все сначала новички.

Кидайте на форму 2 Мемо. Первый - для исходного текста, второй - для того, что нужно отобрать.
Еще нужна кнопка.
В обработчик кнопки пишете:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,cnt,len : integer;
Здесь i - счетчик для прохода по тексту.
cnt - счетчик запятых
len - длина исходного текста.

Дальше тело обработчика.
Очистим Мемо2, чтобы там не было ничего лишнего.
Код:
Memo2.Clear;
Найдем длину текста:
Код:
len := length(Memo1.Text);
Обнулим счетчик запятых. А переменной i присвоим единицу.
Дальше запускаем цикл:
Код:
while i<=len do
 begin
 ..................
 end;
В этом цикле мы пройдем по тексту.
Для начала, пропустим все пробелы:
Код:
 while (i<=len) and (Memo1.Text[i]=' ') do inc(i);
Пробелы пропустили. Теперь проверяем, не является ли текущий символ запятой.
Если является, то увеличиваем счетчик запятых и счетчик i.
Теперь перед нами текст. Пройдем по нему до первого пробела или запятой. И если cnt = 3, то будем писать символы в Memo2.
Код:
while (i<=len) and (Memo1.Text[i]<>',') and (Memo1.Text[i]<>' ') do
  begin
  if cnt=3 then Memo2.Text := Memo2.Text + Memo1.Text[i];
  inc(i);
  end;
-------------------
А теперь соедините это все вместе и получите рабочую программу.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.05.2009, 13:00   #5
MSD
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Все сначала новички.

Кидайте на форму 2 Мемо. Первый - для исходного текста, второй - для того, что нужно отобрать.
Еще нужна кнопка.
В обработчик кнопки пишете:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,cnt,len : integer;
Здесь i - счетчик для прохода по тексту.
cnt - счетчик запятых
len - длина исходного текста.

Дальше тело обработчика.
Очистим Мемо2, чтобы там не было ничего лишнего.
Код:
Memo2.Clear;
Найдем длину текста:
Код:
len := length(Memo1.Text);
Обнулим счетчик запятых. А переменной i присвоим единицу.
Дальше запускаем цикл:
Код:
while i<=len do
 begin
 ..................
 end;
В этом цикле мы пройдем по тексту.
Для начала, пропустим все пробелы:
Код:
 while (i<=len) and (Memo1.Text[i]=' ') do inc(i);
Пробелы пропустили. Теперь проверяем, не является ли текущий символ запятой.
Если является, то увеличиваем счетчик запятых и счетчик i.
Теперь перед нами текст. Пройдем по нему до первого пробела или запятой. И если cnt = 3, то будем писать символы в Memo2.
Код:
while (i<=len) and (Memo1.Text[i]<>',') and (Memo1.Text[i]<>' ') do
  begin
  if cnt=3 then Memo2.Text := Memo2.Text + Memo1.Text[i];
  inc(i);
  end;
-------------------
А теперь соедините это все вместе и получите рабочую программу.
Что то не работает, Мемо2 пустым остается..... ((( Почему?
MSD вне форума Ответить с цитированием
Старый 04.05.2009, 13:29   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Что то не работает, Мемо2 пустым остается..... ((( Почему?
Все работает, если подумать и правильно все сложить.
В любом случае, если у Вас что-то не работает, то я не телепат, и не могу сказать что именно и почему. Выкладывайте код.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.05.2009, 13:46   #7
MSD
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Все работает, если подумать и правильно все сложить.
В любом случае, если у Вас что-то не работает, то я не телепат, и не могу сказать что именно и почему. Выкладывайте код.
procedure TForm1.Button1Click(Sender: TObject);
var i,cnt,len : integer;
begin
Memo2.Clear;
Len := length(Memo1.Text);
while i<=len do
begin
while (i<=len) and (Memo1.Text[i]=' ') do inc(i);
end;
while (i<=len) and (Memo1.Text[i]<>',') and (Memo1.Text[i]<>' ') do
begin
if cnt=3 then Memo2.Text := Memo2.Text + Memo1.Text[i];
inc(i);
end;

end;
end.

вот.. что не так??
MSD вне форума Ответить с цитированием
Старый 04.05.2009, 13:53   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
вот.. что не так??
Я сказал, что нужно все правильно совместить.
Вы берете только куски кода, которые я выложил, но не обращаете внимания на пояснения. Некоторые места я описываю словами.

ps Когда выкладываете код, заключайте его в теги CODE ("#" на панели в окне редактирования).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.05.2009, 14:48   #9
MSD
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 85
По умолчанию

Все равно не получается... что то не так я расставляю, подскажите как пожалуйста.
MSD вне форума Ответить с цитированием
Старый 04.05.2009, 15:07   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Потому что нужно не просто расставлять, а думать, куда что нужно поставить. А вы это делать, похоже, не хотите.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,cnt,len : integer;

begin
cnt := 0;
i := 1;
len := length(Memo1.Text);
Memo2.Clear;
while i<=len do
 begin
 while (i<=len) and (Memo1.Text[i]=' ') do inc(i);
 if Memo1.Text[i]=',' then
  begin
  inc(cnt);
  inc(i);
  end;
 while (i<=len) and (Memo1.Text[i]<>',') and (Memo1.Text[i]<>' ') do
  begin
  if cnt=3 then Memo2.Text := Memo2.Text + Memo1.Text[i];
  inc(i);
  end;

 end;

end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом(C++) silent_witcher Помощь студентам 1 13.12.2008 17:55
Работа с текстом vinimixer Общие вопросы Delphi 0 07.11.2008 21:19
Работа с текстом.[C] DropYourWeapon Общие вопросы C/C++ 3 15.10.2008 21:55
работа с текстом pupil Паскаль, Turbo Pascal, PascalABC.NET 4 15.03.2008 14:00
Работа с текстом Sanek_ntsk Общие вопросы C/C++ 10 12.01.2008 19:42