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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 09:44   #1
Leksda
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 14
Вопрос Объединение строк в Memo

Здравствуйте, столкнулся со следующей задачей:
есть поля memo1 и memo2, в memo1 введены сл. строки

строка0 фраза01 фраза02 фраза03
строка1 фраза11 фраза12 фраза13
слово из фраза11
строка2 фраза21 фраза22 фраза23
строка3 фраза31 фраза32 фраза33

все составляющеи строки нужно завести в строковую переменную а затем объеденить в одну строку и вывести в memo2
Код:
for I := 0 to memo1.lines.Count - 1 do
begin
    s:=memo1.Lines[i];
    s1:=Copy(s,0,7);
    s2:= Copy(s,8,7);
    s3:= Copy (s,16,7);
    s4:= Copy (s,24,7);
    sresult:=s1+s2+s3+s4;
end;
задача следующая:
если длина строки меньше чем 20 символов (строка 'слово из фраза11') объеденить со строкой 'фраза 11', чтобы в memo2 получилось :

строка0 фраза01 фраза02 фраза03
строка1 фраза11 слово из фраза11 фраза12 фраза13
строка2 фраза21 фраза22 фраза23
строка3 фраза31 фраза32 фраза33
оказалось, что апостолов просто колбасило...

Последний раз редактировалось Leksda; 24.03.2009 в 09:57.
Leksda вне форума Ответить с цитированием
Старый 24.03.2009, 09:51   #2
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Что-то я слегка не догнал что такое забавное делает код? Я вот к примеру не вижу 45 символа нив 1 из строк. И поясните пожалуйста что значит "все составляющеи строки нужно завести в строковую переменную"??
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 24.03.2009, 09:58   #3
Leksda
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 14
По умолчанию

для 1 строки memo1
s1= 'строка0'
s2= 'фраза01'
s3= 'фраза02'
s4= 'фраза03'
- "все составляющеи строки нужно завести в строковую переменную"!

нужно чтобы для второй строки memo1
s1= 'строка1'
s2= 'фраза11'+'слово из фраза11'
s3= 'фраза12'
s4= 'фраза13'
оказалось, что апостолов просто колбасило...

Последний раз редактировалось Leksda; 24.03.2009 в 10:01.
Leksda вне форума Ответить с цитированием
Старый 24.03.2009, 10:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну слей все в одну строку:
Код:
Memo.Lines.Delimiter:=' ';
S:=Memo.Lines.DelimitedText;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2009, 10:40   #5
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Извиняюсь, но я тут должен по работе бежать Так что выложу только что сделал наработку: Она разбивает каждую строку текста на слова.
Осталось дописать вторуюб часть
Код:
type
TWordArray = Array of String;

var
  AllText: Array of TWordArray;

procedure StringToWords(SS: String; var WordArray: TWordArray);
var
  S, TmpStr: String;
begin
  SetLength(WordArray, 0);
  S := SS;
	While Pos(' ', S) <> 0 do
  begin
    TmpStr := Copy(S, 1, Pos(' ', S) - 1);
    SetLength(WordArray, Length(WordArray) + 1);
    WordArray[High(WordArray)] := TmpStr;
    Delete(S, 1, Pos(' ', S));
  end;
  if S <> '' then
  SetLength(WordArray, Length(WordArray) + 1);
    WordArray[High(WordArray)] := S;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  I, J: Integer;
  TmpStr: String;
begin
  SetLength(AllText, 0);
  Memo2.Lines.Clear;
  for I := 0 to Memo1.Lines.Count do
  begin
    SetLength(AllText, Length(AllText) + 1);
    StringToWords(Memo1.Lines[I], AllText[High(AllText)]);
    TmpStr := '';
    for J := 0 to Length(AllText[I]) - 1 do
      TmpStr := TmpStr + AllText[I][J];
    Memo2.Lines.Add(TmpStr);
  end;
end;
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 24.03.2009, 10:42   #6
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Stilet
Весть текст это хорошо, но как потом разбивать на строки?
От знаний ещё никто не умирал, но рисковать не стоит.

Последний раз редактировалось XuTpbIu; 24.03.2009 в 10:45. Причина: не подумал хорошо
XuTpbIu вне форума Ответить с цитированием
Старый 24.03.2009, 10:55   #7
Leksda
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 14
По умолчанию

хм.. в том то и дело, что разбивать на слова не нужно!!! приведу конкретный пример

01/01/2009 ул. Пушкина 37 тел. 1111111
02/01/2009 ул. Гоголя тел. 2222222
03/01/2009 ул. 7 октября тел. 3333333
1918 года

это все надо привести к следующему виду

01/01/2009 ул. Пушкина 37 тел. 1111111
02/01/2009 ул. Гоголя тел. 2222222
03/01/2009 ул. 7 октября 1918 года тел. 3333333
оказалось, что апостолов просто колбасило...
Leksda вне форума Ответить с цитированием
Старый 24.03.2009, 11:24   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
XuTpbIu
Да откуда мне, опрславленному антителепату, дотелепать мыслю автора?
Цитата:
Leksda
Чет я не понял всетки каков критерий обьединения?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2009, 12:03   #9
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Тут по крайней мере надо ещё знать индекс строки в которую вставлять(или это всегда предыдущая) и позиция на которую должно быть вставлена строка длиною меньше 20 символов
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 24.03.2009, 12:11   #10
Leksda
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 14
По умолчанию

значится в memo
строка0 фраза01 фраза02 фраза03
строка1 фраза11 фраза12 фраза13
слово из фраза11
строка2 фраза21 фраза22 фраза23
строка3 фраза31 фраза32 фраза33

в цикле присваиваем 4 строковым переменным значения
Код:
for I := 0 to memo1.lines.Count - 1 do
begin
    s:=memo1.Lines[i];
    s1:=Copy(s,0,7);
    s2:= Copy(s,8,7);
    s3:= Copy (s,16,7);
    s4:= Copy (s,24,7);
end;
причем "фраза n" может содержать как одно слово так и несколько.
далее, текст в memo берется из текстового файла
и изначально он выглядит так

Код:
01/01/2009| ул. Пушкина 37      |тел. 1111111  |фикс
03/01/2009 | ул. 7 ноября         |тел. 2222222  |моб
                 |1918 года
03/01/2009 |ул. Гоголя             |тел. 3333333  |фикс
04/01/2009 |ул. Кармзина          |тел. 4444444 |фикс
критерий объединения:
в цикле сделать проверку и если строка меньше 30 символов в данном случае '1918 года', то эту строку добавить в данном случае к 'ул. 7 ноября' чтобы получилось

Код:
01/01/2009| ул. Пушкина 37      |тел. 1111111  |фикс
03/01/2009 | ул. 7 ноября  1918 года       |тел. 2222222  |моб
03/01/2009 |ул. Гоголя             |тел. 3333333  |фикс
04/01/2009 |ул. Кармзина          |тел. 4444444 |фикс
получается что если строка меньше заданной то её добавляют в конец s2 это всегда подстрока предыдущей строки!
оказалось, что апостолов просто колбасило...
Leksda вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сколько строк в memo? Xcopy Общие вопросы Delphi 2 16.03.2009 16:25
Memo - кол-во строк. Лубышев Компоненты Delphi 1 17.05.2008 22:54
Паскаль. Объединение строк. gotex Помощь студентам 6 08.05.2008 22:47
Нумерация строк в Memo Макс84 Компоненты Delphi 10 02.04.2007 17:10
количество строк в memo Albenous Компоненты Delphi 4 15.01.2007 19:00