Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1236871256
It's not me
2009-03-12 18:20
2009.05.17
Делимость бита


15-1236783730
Empleado
2009-03-11 18:02
2009.05.17
Pointer to records


2-1237276874
Cabyrc
2009-03-17 11:01
2009.05.17
связь с БД


15-1237111075
Немо2
2009-03-15 12:57
2009.05.17
Что бы придумать, что бы не ездить на работу?


15-1236796634
Petr V. Abramov
2009-03-11 21:37
2009.05.17
нифигасебе...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский