Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#16: 2015-09-24 14:46:58 ЛС | профиль | цитата
MAV, если в процедуре
Procedure THiAsmClass.doNormal;begin
FStr:= Trim(Norm_Text(PChar(ReadString(_Data,Data)))); // если убрать отсюда Trim
_hi_onEvent(onRes, PChar(Fstr) );
end;
убрать Trim(), то добавится пробел в конце строки.Но тогда не помешал бы и анализ на "." "," "?" "!" и др. знаки. Это потом... может быть.
Netspirit писал(а):
Например, если в StrList и получится уместить такой объем
Не обязательно в StrList - можно попробовать, например в GVar или Memory.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2059
Рейтинг: 132
#17: 2015-09-24 14:59:29 ЛС | профиль | цитата
Tad "." "," "?" "!" ,
+ "...", ":"
"..." - есть знаком, а есть и тремя.
До кучи и ";" +, или запятую исключить.
карма: 6

1
Голосовали:Tad
Ответов: 4628
Рейтинг: 749
#18: 2015-09-24 15:12:46 ЛС | профиль | цитата
Tad писал(а):
Если это про мою IC то ни разу
Если я нигде не ошибся, то вот: code_36299.txt

MAV писал(а):
так можно сократить количество компонент
Не принято у нас изменять строку таким неочевидным способом. Например, пользователь будет в непонятках, почему если подать текст с точки StrList.Text, то текст в списке не изменится, а если подать, например, с StrCat.Result, то в StrCat текст изменится.
Для изменения данных in-place с точки зрения схемостроения у нас подходит MemoryStream: выделили память и делаем там всё, что нужно. Метод Tad'а можно адаптировать для MemoryStream (если надо).

Кроме того,
Netspirit писал(а):
Не думаю, что быстродействие сильно уменьшится, если будет одно копирование на операцию

Netspirit писал(а):
И кстати, у тебя после Trim() всёравно новая копия строки получается

карма: 26

0
файлы: 1code_36299.txt [3.9KB] [654]
Ответов: 16884
Рейтинг: 1239
#19: 2015-09-24 15:14:59 ЛС | профиль | цитата
flint2,
Tad писал(а):
и др. знаки.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4628
Рейтинг: 749
#20: 2015-09-24 15:18:08 ЛС | профиль | цитата
Tad писал(а):
И куда будет копироваться результат, если у меня всего памяти 2ГБ ?
Срочно бежать в магазин за ещё парочкой линеек памяти ?
Поскольку для приложения доступно только 2 Гб памяти, то дополнительные планки тебе не помогут (в т.ч., благодаря файлу подкачки). А из-за фрагментации адресного пространства процесса тебе и больше 1.3 Гб не факт, что удастся выделить. Плюс неучтенные копирования в компонентах.
карма: 26

0
Ответов: 16884
Рейтинг: 1239
#21: 2015-09-24 15:41:23 ЛС | профиль | цитата
#pas
Var Str, S : string;
begin
Str := 'Вася Пупкин'; // здесь Str - это НЕ "Вася Пупкин". Это указатель(адрес) на первую ячейку памяти где хранятся символы "Вася Пупкин"
S := Str; // а здесь в S тоже не "Вася Пупкин", а указатель на указатель Str, который рассказывает S где находятся символы "Вася Пупкин"
// И только, если написать
S := S + Str; // то будет выделен новый участок памяти (с запасом) и туда скопируются символы расположенные по адресу (S(Str) и Str)
// и само S получит новый адрес новой области памяти где будут храниться символы "Вася ПупкинВася Пупкин"
end;
Начинать надо с ассемблера
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4628
Рейтинг: 749
#22: 2015-09-24 15:51:18 ЛС | профиль | цитата
Tad, во второй строке это не "указатель на указатель", это указатель на тот же участок памяти с "Вася Пупкин".
А к чему это?
карма: 26

0
Ответов: 2059
Рейтинг: 132
#23: 2015-09-24 15:56:37 ЛС | профиль | цитата
Адрес строки, не есть указатель(потому, что... Это адрес строки с причендалами. ), указатель, кто на этот адрес тычет.
карма: 6

0
Ответов: 4628
Рейтинг: 749
#24: 2015-09-24 16:02:35 ЛС | профиль | цитата
Не знаю, для меня адрес = указатель, а "кто на этот адрес тычет" - это переменная типа "указатель" (для хранения указателя)
flint2 писал(а):
потому, что... Это адрес строки с причендалами
Любой адрес от этого не перестаёт быть указателем. И, кстати, указатель на строку как раз указывает на первый символ этой строки, а не на её "причиндалы". Чтобы получить "причиндалы", с этим указателем нужно ещё повозиться.
карма: 26

0
Ответов: 2059
Рейтинг: 132
#25: 2015-09-24 16:07:21 ЛС | профиль | цитата
Netspirit,
Тоже верно!!!
Но такое ощущение, что все говорят после обрушения Вавилонской башни.
Не только этот топик, а что строк касаемо.

карма: 6

0
Ответов: 16884
Рейтинг: 1239
#26: 2015-09-24 16:14:57 ЛС | профиль | цитата
Netspirit писал(а):
А к чему это?
К тому, что переменная String является указателем на текст, а не самим текстовым буфером.
------------ Дoбавленo в 16.14:
Netspirit писал(а):
во второй строке это не "указатель на указатель"
Точно. Пора отдыхать.
Перерыв до 20:00. Уехал в басейн.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4628
Рейтинг: 749
#27: 2015-09-24 16:17:38 ЛС | профиль | цитата
Tad, это никак не противоречит тому, что присвоение String := PChar приводит к копированию.
карма: 26

0
Ответов: 2059
Рейтинг: 132
#28: 2015-09-24 16:27:07 ЛС | профиль | цитата
Tad писал
а не самим текстовым буфером.

Вот пример. Что не так?
Привыкли с логикой работать, а "строку" от "строки" определить внятно nicht (омонимы), чтобы понятно было, - слов не находится.
Не в смысле нуль строк, длина- указатель (это похоже, что Tad (только про длину не надо начинать), а вообще.
Очень легко перейти (а может человек именно в это плоскости думает) на удобное для своей точки зрения определения строки...
Тогда лучше говорить что мы делаем и что получается при этом, тогда, не будет разночтений.
Каждый судит со своей колокольни, а не то что написано.

карма: 6

0
Ответов: 1304
Рейтинг: 405
#29: 2015-09-24 16:42:02 ЛС | профиль | цитата
Netspirit писал(а):
Не принято у нас изменять строку таким неочевидным способом
Netspirit, к примеру Delete в Паскале тоже не очевиден , изменяет исходную строку, но вроде не кому это не мешает. Просто чтобы путаницы небыло создать отдельную группу элементов.
карма: 3

0
Ответов: 2059
Рейтинг: 132
#30: 2015-09-24 16:53:03 ЛС | профиль | цитата
MAV
Просто чтобы путаницы небыло создать отдельную группу элементов.

!!! в смысле Да, ну и канитель начнётся.
Tad, я правильно понимаю, что это не только про строки?
Кто по что, а голый про указатели в точках.
Неужели все битики в TData закончились? (Мимо точек - гораздей!)
карма: 6

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)