![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PChar TO String [D7, WinXP]
Davinchi © (2004-11-29 20:42:00)Господа, наверное глупый вопрос, но как корректно перевести Buffer: Array[0..255] of Char в Str: String, при этом выкинуть все переводы строк и пустые символы или "кракозябры", которые нормально не отображаются.... Я имею ввиду какую нибудь стандартную функцию, если таковой нет, то я сам это могу сделать, прото времени нет писать ее самому...
Заранее благодарен!!!
GrayFace (2004-11-30 05:57:00) [1]GuAV © (29.11.04 23:57) [10]
SetLength(Result, High(A) - Low(A));
SetLength(Result, High(A) - Low(A) + 1);
GuAV © (29.11.04 23:57) [11]
Че значат эти цифры?
GanibalLector (2004-11-30 00:01:00) [2]2 GuAV [11]
Это и так понятно ;)
GuAV (2004-11-29 23:57:00) [3]
var A: array[0..255] of Char =
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF'+
'0123456789ABCDEF0123456789ABCDEF';
function Concatenation: string;
var I: Integer;
begin
Result := '';
for I := Low(A) to High(A) do
if A[I] in ['0'..'9'] then
Result := Result + A[I];
end;
function DirectAssignment: string;
var I, J: Integer;
begin
J:=0;
SetLength(Result, High(A) - Low(A));
for I := Low(A) to High(A) do
if A[I] in ['0'..'9'] then
begin
Inc(J);
Result[J] := A[I];
end;
SetLength(Result, J);
end;
procedure TForm1.Button1Click(Sender: TObject);
const
TestCount = 10000;
var
A, B: Cardinal;
i: Integer; i1, i2 : tcolor;
begin
Assert(Concatenation = DirectAssignment);
A := GetTickCount;
for i := 0 to TestCount do Concatenation;
A := GetTickCount - A;
B := GetTickCount;
for i := 0 to TestCount do DirectAssignment;
B := GetTickCount - B;
Caption := Format('Concatenation = %d'+
', DirectAssignment = %d', [A, B]);
end;
GuAV (2004-11-29 23:57:00) [4]Concatenation = 935, DirectAssignment = 21
GanibalLector (2004-11-29 23:32:00) [5]2 GuAV © [8]
> предварительно установив длину S в максимум, а потом скоректировав длину.
Начитался статей http://www.delphimaster.ru/articles/dyntable/index.html ???
GuAV (2004-11-29 23:25:00) [6]2 GanibalLector
SetString(Str, Buffer, 256);- и Chr(0) не страшен.
А по теме - согасен с begin...end © (29.11.04 22:08) [5]. Только лучше прибавлять не S:=S+Ch, а S[I]:=Ch, предварительно установив длину S в максимум, а потом скоректировав длину.
GanibalLector (2004-11-29 23:03:00) [7]begin...end предложил в [3] правильно,а то что там переводы строк...это ничего.Лишь бы chr(0) не было
begin...end (2004-11-29 22:12:00) [8]> Davinchi
P.S. Надеюсь, Вы понимаете, что если я этого решения не вижу, то это не означает, что его нет... :-) Подождите, может кто чего подскажет...
begin...end (2004-11-29 22:08:00) [9]> [4] Davinchi © (29.11.04 22:04)
Что-то не вижу никакого решения, кроме пробега по массиву и прибавления / неприбавления очередного символа к Str в зависимости от того, считается ли этот символ мусором или нет...
Davinchi (2004-11-29 22:04:00) [10]не идет по той причене, что присутствуют переводы строк и еще всякие спец символы. К стати, StrPas делает то же самое... А кок получить строку без всякого мусора???
begin...end (2004-11-29 21:59:00) [11]> Davinchi © (29.11.04 20:42)
> как корректно перевести Buffer: Array[0..255] of Char в
> Str: String
Str := String(Buffer)не подойдёт?
Davinchi (2004-11-29 21:01:00) [12]а че делает StrPas??? ни это ли случайно
NE_Mashinist (2004-11-29 20:57:00) [13]Не слышал стандартной, думаю что нет!