Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

Работа со строками через 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
3-1220613409
Razrab7
2008-09-05 15:16
2009.05.17
Вопрос по работе с ADOStoredProc для СУБД Oracle


3-1220993402
kaif
2008-09-10 00:50
2009.05.17
TClientDataSet + ADO + MSSQL


3-1220965928
kaif
2008-09-09 17:12
2009.05.17
ADO Delphi и транзакции MSSQL


15-1236852850
b@v
2009-03-12 13:14
2009.05.17
ACCESS to MySQL


15-1236052367
RGV
2009-03-03 06:52
2009.05.17
запретить бразузерам выходить на определенные сайты