Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.20;
Скачать: [xml.tar.bz2];

Вниз

Вытащить часть текста из Memo   Найти похожие ветки 

 
Демерго   (2010-12-01 13:54) [0]

Всем привет!

Я хочу вытащить часть текста из Memo. Например:

Тест "Сегодня_хорошая_погода" и надо вытащить слово между "Сегодня_" и "_погода" и вставить в Edit. то есть чтобы текст в Edit = "хорошая".

Заранее большое спасибо!


 
Palladin ©   (2010-12-01 14:01) [1]

функция Pos обычно изучается еще в школе...


 
Palladin ©   (2010-12-01 14:02) [2]

... и функция Copy вместе с ней


 
Ega23 ©   (2010-12-01 14:04) [3]

1. Определиться, что такое "слово".
Набор символов, разделённых пробелом?
Набор символов, разделённых пробелом или спец.символами?
Набор символов, разделённых пробелом, спец.символами и знаками препинания?
Какой именно набор символов? "12пп45" - это слово или нет?

Ну а дальше разбить текст (Memo.Text) на массив "слов" и найти в нём разницу.
Второе - элементарная задачка для первого курса.
А вот с первым блоком - сложнее.


 
Медвежонок Пятачок ©   (2010-12-01 14:10) [4]

Можно проще.

Edit1.Text := "фиговая";
Memo1.Lines.text:= "Сегодня_" + Edit1.Text + "_погода";


 
Демерго   (2010-12-01 14:11) [5]

Дело в том что я никакие курсы не посещал, самоучка. Надеюсь на пример кода.

Ситуация такая что я знаю слово А и слово Б и мне надо вытянуть текст который находится между этими словами.


 
Медвежонок Пятачок ©   (2010-12-01 14:12) [6]

Дело в том что я никакие курсы не посещал, самоучка.

А чего ты самоучка?
Что именно успел самовыучить?


 
Демерго   (2010-12-01 14:13) [7]

я умею писать простенькие программы по примерам. не просто "скопировать код", а понять как оно работает и приспособить под свои нужды.


 
Ega23 ©   (2010-12-01 14:14) [8]


> Ситуация такая что я знаю слово А и слово Б и мне надо вытянуть
> текст который находится между этими словами.


Тебе весь текст нужен?
А если у тебя 2 раза такое сочетание встречается?
А если эти сочетания вложенные?

Например, слово А и Б:

123 А ппп Б лтвыалт А А А олдтлыфвтмапшрт Б Б Б вввв   АААБББ


 
Медвежонок Пятачок ©   (2010-12-01 14:14) [9]

ну замечательно.
выучи еще пару функций (что выше) и все будешь знать.


 
Медвежонок Пятачок ©   (2010-12-01 14:16) [10]

я умею писать простенькие программы по примерам. не просто "скопировать код"

В том смысле что не пользуешься (не умеешь?) буфером обмена, а переписываешь примеры?


 
Демерго   (2010-12-01 14:18) [11]

To Ega23:

Вот конкретный пример:

Привет</td><td style="width:40%; text-align:left;">1</td>

Мне нужно вытащить текст между Привет</td><td style="width:40%; text-align:left;"> и </td>


 
Демерго   (2010-12-01 14:20) [12]

то есть вырезанный текст должен быть = 1


 
Ega23 ©   (2010-12-01 14:23) [13]

Вот строка.

Привет</td><td style="width:40%; text-align:left;">2222 Привет</td><td style="width:40%; text-align:left;">1</td> </td>

Что у тебя должно получиться?


 
Демерго   (2010-12-01 14:24) [14]

В моем тексте только один раз встречается Привет</td><td style="width:40%; text-align:left;">

Проще говоря я могу задать уникальные А и Б между которыми надо вырезать текст


 
Демерго   (2010-12-01 14:26) [15]

а в твоем примере должно получится 2222 Привет


 
Ega23 ©   (2010-12-01 14:27) [16]


> Проще говоря я могу задать уникальные А и Б между которыми
> надо вырезать текст


два раза Pos, один раз Copy. Справку по обеим функциям можно вызвать по F1


 
Демерго   (2010-12-01 14:27) [17]

Программа находит текст А, после этого она копирует все символы в Edit пока не дойдет до текста Б


 
Медвежонок Пятачок ©   (2010-12-01 14:27) [18]

а можно небольшой пример?


 
stas ©   (2010-12-01 14:28) [19]

задаешь начало строки, конец, результат середина, если начало не найдено вернет начиная с 1-го символа.

Function StrCut (SourceString,StartStr,EndStr:String):String;
Var I,K:Integer; Strn:String;
begin
Result:="";
strn:=SourceString;
i:=Pos(StartStr,Strn);
   Strn:=Copy (Strn,i+Length(StartStr),Length(Strn)-Length(StartStr));
   i:=Pos(EndStr,Strn);
   if i=0 then
    begin
     i:=Length(Strn);
     K:=0;
    end else k:=Length(EndStr);
   Strn:=Copy (Strn,1,i-1);
 Result:=Strn;
end;


 
Ega23 ©   (2010-12-01 14:29) [20]


> Программа находит текст А, после этого она копирует все
> символы в Edit пока не дойдет до текста Б


Это не сочетается с

> а в твоем примере должно получится 2222 Привет


 
Ega23 ©   (2010-12-01 14:34) [21]


> stas ©   (01.12.10 14:28) [19]


1. В твоём коде ошибка.
2. Вычислять каждый раз Length(StartStr), Length(EndStr) - моветон.

Задача в целом, судя по всему, рекурсивная. Но не надо забывать, что строка неправильной может быть, типа A 111 A 222 B ddd A   fff B


 
Palladin ©   (2010-12-01 14:37) [22]

основная трабла всех начинающих: внутриголовной компилятор хотелок работает с грубейшими ошибками, его чинить надобно...
кто-то не чинит... вырастает быдлокодер.... задумайся, о аффтар, пока не поздно )


 
stas ©   (2010-12-01 14:41) [23]

1. В каком месте?
2. Согласен.


 
Ega23 ©   (2010-12-01 14:42) [24]


> Palladin ©   (01.12.10 14:37) [22]


У нас подобные задачки на первом курсе давали. Практика показала, что те, кто решил сам - стали программистами. Те, кто не решил - стали манагерами.


 
stas ©   (2010-12-01 14:43) [25]

Вообще для таких целей надо юзать RegExpr"ы. А вырезать уже предварительно обработанную строку.
RegExpr - регулярные выражения. Для Delphi есть бесплатная библиотека.


 
Демерго   (2010-12-01 14:45) [26]

Всем огромнейшее спасибо! особенно stas. Код уже присобачен и работает :)

Выглядит на примере так:

procedure TForm1.Button1Click(Sender: TObject);
var I5,K:Integer; Strn:String;
begin
strn:=form1.Memo1.Lines[0];
i5:=Pos("Me",Strn);
  Strn:=Copy (Strn,i5+Length("Me"),Length(Strn)-Length("Me"));
  i5:=Pos("o1",Strn);
  if i5=0 then
   begin
    i5:=Length(Strn);
    K:=0;
   end else k:=Length("o1");
  Strn:=Copy (Strn,1,i5-1);
Edit1.Text:=Strn;
end;

После выполнения выдает букву m


 
Ega23 ©   (2010-12-01 14:45) [27]


> stas ©   (01.12.10 14:41) [23]
>
> 1. В каком месте?


представь, что Pos(StartStr,Strn) равно 0.


 
stas ©   (2010-12-01 14:46) [28]

Демерго   (01.12.10 14:45) [26]
его надо было как функцию использовать ).


 
Ega23 ©   (2010-12-01 14:47) [29]


>  Код уже присобачен и работает :)


Теперь возьми и вместо "Me" задай стартовую строку "jsahbfjuhsafdyu"
И насладись.


 
Демерго   (2010-12-01 14:48) [30]

мне проще 10 раз этот код прописать и получить результат чем разбираться как эти функции потом вызывать правильно :)  Главное я получил что хотел и тебе спасибо что сразу дал пример


 
Демерго   (2010-12-01 14:49) [31]

то Ega23:

надеюсь это был не сарказм и все будет работать даже с такой строкой как "jsahbfjuhsafdyu" :)


 
Ega23 ©   (2010-12-01 14:49) [32]


> Демерго   (01.12.10 14:13) [7]
>
> я умею писать простенькие программы по примерам. не просто
> "скопировать код", а понять как оно работает и приспособить
> под свои нужды.



> Демерго   (01.12.10 14:48) [30]
>
> мне проще 10 раз этот код прописать и получить результат
> чем разбираться как эти функции потом вызывать правильно
> :)  Главное я получил что хотел и тебе спасибо что сразу
> дал пример


Быдлокодер детектед.


 
stas ©   (2010-12-01 14:50) [33]

Ega23 ©   (01.12.10 14:45) [27]
точно спасибо. )


 
Демерго   (2010-12-01 14:51) [34]

то Ega23:

я пишу ТОЛЬКО для себя и ни для кого более. Мне важен результат а не размер и скорость выполнения программы в миллисекундах. Но все равно спасибо на добром слове


 
Leonid Troyanovsky ©   (2010-12-01 22:51) [35]


> Демерго   (01.12.10 13:54)

RTFM: SelText.

--
Regards, LVT.


 
Inovet ©   (2010-12-02 00:41) [36]

> [34] Демерго   (01.12.10 14:51)
> я пишу ТОЛЬКО для себя и ни для кого более. Мне важен результат
> а не размер и скорость выполнения программы

Так не сколрость и размер, а сам же потом и наступишь в этот код десять раз.


 
Демерго   (2010-12-02 14:59) [37]


> stas ©


Надеюсь еще на одну твою подсказку по следующему вовпросу:

procedure TForm1.Button1Click(Sender: TObject);
var I5,K:Integer; Strn:String;
begin
strn:=form1.Memo1.text;
i5:=Pos("Me",Strn);
 Strn:=Copy (Strn,i5+Length("Me"),Length(Strn)-Length("Me"));
 i5:=Pos("o1",Strn);
 if i5=0 then
  begin
   i5:=Length(Strn);
   K:=0;
  end else k:=Length("o1");
 Strn:=Copy (Strn,1,i5-1);
Edit1.Text:=Strn;
end;

Код выдает то что находится между "Me" и "o1" только в том случае если "Me" или "o1" находятся в одной строке. То есть если в случае "Me" буква М будет в строке(1) а буква е в строке(2) то код не воспринимает это как одно целое.

Пример.

есть слово memo.line[0]="Метаболизм".

В коде прописываем вырезать между "Ме" и "изм". Получаем "табол".

Но если слово записано в в двух строках:

memo.line[0]="М".
memo.line[1]="етаболизм".

то код уже не дает нужного результата.

Можно как-то слить все memo.line в одну строку, чтобы небыло этих разрывов? или возможно есть какое-то другое решение


 
Ega23 ©   (2010-12-02 15:04) [38]


> Демерго


Чукча не читатель. Я тебе на этот вопрос уже отвечал.
Но ты его проигнорировал, выпрашивая код.

На месте stas я бы не отвечал.


 
stas ©   (2010-12-02 15:05) [39]

да т.к. между "М" и "e" есть непечатаемые символы их можно помоему #13#10 точно незнаю. Их можно исключить с помощью
Text:=StrUtils.AnsiReplaceStr(memo1.text,#13#10,"");
Типа такого что-то.


 
stas ©   (2010-12-02 15:10) [40]

Демерго   (02.12.10 14:59) [37]
Честно говоря Ega23 прав нужно разобраться т.к. одно дело работать с простой строкой, другое дело парсить html. У тебя будут возникать все новые и новые проблемы, твой код начнет обрастать подпорками, потом ты в нем не разберешься.


 
Демерго   (2010-12-02 15:13) [41]

to Ega23:

если бы меня интересовало твое мнение я бы у тебя его спросил. на данный момент все что я от тебя получил это хамство, хамство и еще раз хамство. У меня к тебе большая просьба, в дальнейшем игнорируй мои посты на данном форуме. Спасибо.


 
Демерго   (2010-12-02 15:15) [42]


> stas ©  


Спасибо, буду пробовать.

Я разбираюсь по ходу движения, спрашиваю, пробую. Ты очень помог мне продвинуться вперед.


 
Ega23 ©   (2010-12-02 15:17) [43]


> одно дело работать с простой строкой, другое дело парсить html


А это без разницы. Я ещё в 3-м посте говорил, с чем надо определиться. Товарищ так и не определился, отсюда грабли и вытекают.

Следующий вопрос будет "Што делать, у миня символ табуляции". Или Unix-like окончание строки. Или "хакер-like" (c) АП  окончание строки. Или длинный пробел. Или тире.


 
Ega23 ©   (2010-12-02 15:19) [44]


>  У меня к тебе большая просьба, в дальнейшем игнорируй мои
> посты на данном форуме


Не дождёшься. Теперь уже точно.


 
Демерго   (2010-12-02 15:29) [45]

В интернет-терминологии «тролль» — это интернет-хулиган, который размещает грубые или провокационные сообщения в Интернете, например, в дискуссионных форумах, мешает обсуждению или оскорбляет его участников. Слово «троллинг» может характеризовать либо непосредственно одно сообщение, либо в целом размещение таких сообщений. Также под «троллингом» часто подразумевается психологическая манипуляция, основанная на публичном высмеивании или уничижении убеждений (в основном заблуждений или предубеждений, радикальных взглядов и т.д.) оппонентов, приводящая к эмоциональной нестабильности последних (эмоциональным срывам в той или иной форме, проявление которых называется «заглотнул блесну» и обычно является конечной целью «троллинга»). Понятие «троллинг» также используется, чтобы описать деятельность интернет-хулиганов вообще.

В целом, подобное поведение подпадает под определение хулиганства (не обязательно в юридическом контексте), являясь одной из его форм. Некоторые люди занимаются троллингом с целью собственного развлечения, получая удовольствие от собственных действий. Бывает, что целью троллинга становятся как раз люди, пытающиеся привлечь внимание к своей персоне или фанатично верующие во что-либо. Тролли, занимающиеся подобным видом троллинга, больше наслаждаются процессом, чем результатом, и никогда не раскрывают собственных данных. Бывает, что одним человеком заводится несколько учётных записей на одном сайте, основная из которых используется по прямому назначению, а вспомогательная — для троллинга. Сами тролли делят троллинг на «толстый» и «тонкий». «Толстый» троллинг всегда виден при первом взгляде, он состоит в вызывающем поведении, прямых оскорблениях и однозначных нарушениях правил. «Тонкий» троллинг намного сложнее распознать, его удачность и степень воздействия зависит от того, насколько хорошо тролль разбирается в людях. «Тонкий» тролль отлично знает все правила, принятые в месте, где он троллит, и действует на их грани, не нарушая напрямую, зачастую вынуждая администрацию на превышение полномочий или на нарушение собственных же правил. Успешно проведённый «тонкий» троллинг может даже не быть обнаружен.

и т.д.

http://ru.wikipedia.org/wiki/Trolling

Читай, расти над собой, возраст уже позволяет.


 
Ega23 ©   (2010-12-02 15:38) [46]


> Демерго   (02.12.10 15:29) [45]


Детка, если ты внимательно посмотришь на свои ветки, то увидишь, что тебе пыталось помочь немало людей. Но, сталкиваясь с дремучей ленью, невежеством и вымогательством кода (а если ты считашь, что ты такой тут один уникальный, то смею тебя разочаровать: с момента старта форума тут таких over 9000 было) вызвал к себе отвращение и помогать тебе больше не будут.
Тот код, что дал тебе stas является неправильным (что он сам признал).
Но тебе пофигу. Тебе лишь бы работало.

Кстати, я кажется просёк тему: декабрь же, коллеги! Сессия на носу.


 
Dennis I. Komarov ©   (2010-12-02 15:40) [47]


> Ega23 ©   (02.12.10 15:38) [46]

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


 
Ega23 ©   (2010-12-02 15:43) [48]


>  что все кругом плохие...


Дык так и есть...


 
Демерго   (2010-12-02 15:45) [49]

1. Деткой будешь маму свою называть.
2. Не подписывайся за всех. Ты не пуп этого форума.
3. stas хотя бы попытался помочь вместо того чтобы поучать.
4. мне 27 лет, сессии уже давно позади и моя профессия не связана с програмированием и близко.
5. Займись чем-то полезным.


 
Jeer ©   (2010-12-02 15:47) [50]


> Демерго   (01.12.10 13:54)
>
> Всем привет!
..
> Заранее большое спасибо!
> <Цитата>


С такими ключевыми словами
Диагноз ясен заранее:
Перец крутой на форум взошел,
Тему лихую срочно завел.
"Вы за меня тут потрудитесь,
Авось и на будущее сгодитесь."


 
Jeer ©   (2010-12-02 15:48) [51]


> 4. мне 27 лет, сессии уже давно позади и моя профессия не
> связана с програмированием и близко.


Тогда, будь любезен.. и близко не подходи к форумам программистов.
Мы же не лезем в форумы свинарщиков ?


 
sniknik ©   (2010-12-02 15:51) [52]

> все что я от тебя получил это хамство, хамство и еще раз хамство.
только как ответную реакцию на твое хамство, некомпетентность и неадекватность. смотрю, когда он пытался тебе что-то дать/уточнить, ты его игнорировал, и нес ахинею.

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


 
Ega23 ©   (2010-12-02 15:52) [53]


> Демерго   (02.12.10 15:45) [49]


Киса, у Флёнова тебе будет самое место.


 
Демерго   (2010-12-02 15:53) [54]

Можно закрывать тему пока сюда не сползлись все местные форумные тролли. В целом код у меня получился, хотя еще надо будет обработать напильником. Спасибо за помощь.


 
sniknik ©   (2010-12-02 16:02) [55]

> 3. stas хотя бы попытался помочь вместо того чтобы поучать.
"медвежья услуга"... Ega23 помог гораздо больше, но ты этого просто не понял. может потом, когда "упрешься" вернешься, перечитаешь и поймешь.

китайская притча (опустим как они встретились, сразу к делу)
- «Вы не туда едете, господин. Княжество Чу на юге; почему же вы направляетесь на север?»
- «Не имеет значения, отвечал человек в повозке. Вы же видите, моя лошадь бежит очень быстро».
- «Ваша лошадь, без сомнения, очень хороша, однако дорога, по которой вы едете, неправильна».
- «Не стоит беспокоиться, заверил старца человек в повозке. Взгляните, моя повозка совершенно новая, она сделана в прошлом месяце».
- «Ваша повозка и впрямь очень новая, однако дорога, по которой вы едете, ведет вовсе не в княжество Чу».
- «Почтенный старец, сказал человек в повозке. Вы еще не знаете, что у меня в этом сундуке очень много денег, и долгого пути я не боюсь».
- «Ваше богатство и впрямь велико, сказал старец, однако дорога, по которой вы едете, неправильна. Послушайте, вы бы лучше поворачивали и поезжали назад».
- «Но я еду так уже десять дней! воскликнул очень нерадостно человек в повозке. Как, почему вы велите мне вдруг ехать назад? Посмотрите только на моего возницу: как хорошо он правит лошадью! Не беспокойтесь ни о чем, прощайте!»
Тут он велел вознице ехать вперед, и лошадь побежала еще быстрее.


 
sniknik ©   (2010-12-02 16:04) [56]

> все местные форумные тролли.
троль тут только один. залетный.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.005 c
9-1188473601
@!!ex
2007-08-30 15:33
2011.02.20
Загрузочный экран.


15-1289370917
Медвежонок Пятачок
2010-11-10 09:35
2011.02.20
Почему кошка носит белые носки, а собака лает


2-1290952548
delpilamer
2010-11-28 16:55
2011.02.20


15-1289251794
Юрий
2010-11-09 00:29
2011.02.20
С днем рождения ! 9 ноября 2010 вторник


2-1291209781
Демерго
2010-12-01 16:23
2011.02.20
Русский шрифт в Memo





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский