Форум: "Прочее";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];
ВнизРабота со строками через asm - переносимость между версиями? Найти похожие ветки
← →
Cobalt © (2009-03-16 12:15) [0]Есть унаследованный код обработки строк, функции все на ассемблере.
Одна функция, которая мне нужна - не работает, т.е. не изменяет строку, как в описании функции а оставляет её неизменной.
Т.к. ассемблер вспоминать не хочется, написал аналог на паскале, но это же, подозреваю, дольше работает (тоже, кстати, вопрос!)
Если эту же функцию переделать на ассемблер (*для скорости*) будет ли она корректно работать на 7-ке и на 2009 Студии?
Т.к. библиотечка датируется 2001 годом, подозреваю, что это именно потому :-(
← →
MBo © (2009-03-16 13:14) [1]>будет ли она корректно работать на 7-ке и на 2009 Студии?
в 2009 строки по умолчанию юникодные, так что проблемы с совместимостью будут.
А что за функция?
← →
KSergey © (2009-03-16 13:38) [2]А 2009 студия генерит нативный код? Или только .НЕТ?
← →
MBo © (2009-03-16 13:50) [3]только нативный.
дотнет - отдельный продукт (хотя, возможно, в комплект Studio оно и входит) - Delphi Prism (бывший RemObjects Oxygene)
← →
Cobalt © (2009-03-16 14:19) [4]
> MBo © (16.03.09 13:14) [1]{ Q_SpaceCompressInPlace удаляет из строки начальные и конечные пробелы и
управляющие символы (меньше пробела). Кроме того, все подряд идущие пробелы
и управляющие символы в середине строки заменяются одним пробелом. Исходная
строка изменяется. }
procedure Q_SpaceCompressInPlace(var S: string);
← →
Sapersky (2009-03-16 14:22) [5]Если эту же функцию переделать на ассемблер (*для скорости*) будет ли она корректно работать на 7-ке и на 2009 Студии?
Нет. Разве что отказаться от юникода в 2009-м, заменив все String на AnsiString.
написал аналог на паскале, но это же, подозреваю, дольше работает
Скорее всего, не намного, если функция правильно написана. Ну, процентов 10-15, может и меньше.
← →
MBo © (2009-03-16 14:25) [6]Случайно есть почти такая процедура, кроме управляющих символов
procedure RemoveTrailingAndStartingSpacesAndZipInnerSpaces(var s: string);
var
Len, i, j: Integer;
RemoveSpace: Boolean;
begin
Len := Length(s);
j := 0;
RemoveSpace := True;
for i := 1 to Len do begin
if s[i] = " " then
if RemoveSpace then
Inc(j)
else begin
RemoveSpace := True;
s[i - j] := s[i];
end
else begin
RemoveSpace := False;
s[i - j] := s[i];
end;
end;
SetLength(s, Len - j - Ord(RemoveSpace));
end;
← →
test © (2009-03-16 14:26) [7]trim?
Unit
SysUtils
Trims leading and trailing spaces and control characters from a string.
Category
string handling routines
Delphi syntax:
function Trim(const S: string): string; overload;
function Trim(const S: WideString): WideString; overload;
← →
test © (2009-03-16 14:31) [8]d2007
Pascal
function Trim(const S: string): string; overload;
function Trim(const S: WideString): WideString; overload;
File
SysUtils
Description
Trim removes leading and trailing spaces and control characters from the given string S.
← →
MBo © (2009-03-16 14:35) [9]>MBo © (16.03.09 14:25) [6]
Если скорость уж очень актуальна, то примерно на 20 % быстрее:
procedure RemoveTrailingAndStartingSpacesAndZipInnerSpaces2(var s: string);
var
Len, i, j: Integer;
RemoveSpace: Boolean;
pc: PChar;
begin
Len := Length(s);
j := 0;
pc := @s[1];
RemoveSpace := True;
for i := 0 to Len - 1 do begin
if pc[i] = " " then
if RemoveSpace then
Inc(j)
else begin
RemoveSpace := True;
pc[i - j] := pc[i];
end
else begin
RemoveSpace := False;
pc[i - j] := pc[i];
end;
end;
SetLength(s, Len - j - Ord(RemoveSpace));
end;
← →
MBo © (2009-03-16 14:55) [10]модификация для непечатных
if pc[i] <= " " then
if RemoveSpace then
Inc(j)
else begin
RemoveSpace := True;
pc[i - j] := " ";
end
← →
Cobalt © (2009-03-16 15:11) [11]Знаете ли вы, что...
Есть еще такие непечатные символы, как неразрывный пробел (#160), появляющийся в тексте при импорте из МСОфиса.
← →
MBo © (2009-03-16 15:14) [12]я ориентировался на это:
> и управляющие символы (меньше пробела)
>Знаете ли вы, что...
;)
тогда нужно собрать непечатные символы в множество
← →
Anatoly Podgoretsky © (2009-03-16 16:43) [13]Cobalt © (16.03.09 15:11) [11]
Там поблизости много таких.
MBO уже предложил множество, хоть допустимых, хоть нет. Можно даже схитрить для верхней половины, если учесть, что начиональные символы строго вверху, тогда почти универсально будет. ValidChars of [ #@20..$7E, #$C0..#$FF]
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c