![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение длины видимого текста в Memo [D6, WinXP]
DeepProg © (2004-07-05 22:15:00)В Memo загружается текст из txt файла в кодировке Windows. Текст из Memo передается в переменную s типа string.
Length(s): Unaccessible value, поэтому при попытке остановить, например, поиск слова по достижении конца текста, ничего не выходит, и поиск продолжается, находя невидимые символы.
Вопрос: как ограничить либо длину текста в Memo, либо длину string до последнего видимогосимвола.
Лучше бы, конечно, ограничить строку.
Delphin (2004-07-06 13:17:00) [1]Memo1.MaxLength
TUser (2004-07-06 07:45:00) [2]
> "Невидимые" символы называются управляющими
Подозреваю, что в данном случае имеется ввиду видимый текст. Невидимые символы - соотв. те, которые ниже/выше. Хотя не знаю.
R (2004-07-06 03:27:00) [3]Что Вам надо сделать с текстом в Memo?
Если честно я так и не понял.
-найти символ
-найти слово
-исключить символ(ы) с текста
-иное.
Начнем с этого.
Palladin (2004-07-06 03:18:00) [4]1) Нужно быть проще
Function GetWord(Const Source:String;Var CharPos:Integer):String;
Begin
Result:='';
While (CharPos<=Length(Source)) and not (Source[CharPos] in SepSymb) Do
Begin
Result:=Result+Source[CharPos];
Inc(CharPos);
End;
While (CharPos<=Length(Source)) And (Source[CharPos] in SepSymb) Do Inc(CharPos);
End;
2) "Невидимые" символы называются управляющими. Memo ничего само по себе ничего не добавляет.
Проблема как всегда в подходе...
DeepProg (2004-07-06 02:54:00) [5]RTFM - вы правы... Пока что этот форум + несколько других сайтов мне ее заменяют.
Сначала скажу, что невидимые символы перестали мешать(не проявляются), при том, что принципиальных изменений в код чтения из Memo внесено не было и ограничение поиска( вот разве что оно стало как бы двойным: При промотре текста вообще + при Получении слова) успешно осуществляется по Length(Memo1.Text).
1) для Watch, но не для Inspect, т.е. определнное значение все- таки доступно.
Вот эта функция, запускаемая в ButtonClick, первоначально, при каждом новом нажатии кнопки, после того, как видимый текст(латиница) закончился, продолжаала находить символы(крякозябры, кириллицу, специальные), сейчас этого не происходит, но что могло быть тогда, думаю было бы полезно знать
---------------------------------------------------------
//*******************************************************
{ в Source загоняется текст: Memo1.Text
CharPos: начинается с 1, внутри меняется, обеспечивая проход по всему тексту
}
//*******************************************************
var SepSymb: set of Char= [' ',#10, #13, #0]
...
function TfmTxtProc.GetWord(Source: String; var CharPos: integer): string;
var w:string;
ch:Char;
begin
w:='';
ch:='z';
while (CharPos<=Length(Source)) and not(ch in SepSymb)
or (w='') do
begin
ch:=Source[CharPos];
inc(CharPos);
if not(ch in SepSymb) then
w:=w+ch;
end;
Result:=w;
end;
----------------------------------------
2) Я не утверждаю, что они именно в файле, возможно за их появление отвечает Memo.
3) см. код. Меня интересуют только видимые символы.
4) уже не передается
5) есть, только длину эту заранее узнать, почему-то не удавалось.
6) предполагается текст набитый user'ом в notepad. Так что нет, причем этого никогда и не происходило.
KilkennyCat (2004-07-06 01:10:00) [6]Честно говоря, я не понял:
1) Почему length(s): Unaccessible value ? - код приведите.
2) Откуда у Вас в txt файле в кодировке Windows невидимые символы?
3) Как может поиск найти невидимые символы? Точнее, что Вы ищите? Слово из невидимых символов?
4) Зачем текст передается в переменную? только для поиска?
5) Разве у Мемо нет свойство, задающее ограничение длины?
6) Разве ограничение string до последнего видимого символа не может подразумевать их наличие в середине?
Будет код - будет ответ. А пока создается впечатление, что Вам лучше прочитать книжку. С самого начала.