Форум: "Потрепаться";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизРаз и навсегда избавиться от вопроса STR-->PCHAR. Найти похожие ветки
← →
Alexander Panov © (2005-05-17 11:46) [0]Для преобразования String в PChar и обратно самое простое - воспользоваться нижеописанными функциями:
function StringToPChar(s: String): PChar;
var
i: Integer;
begin
ReallocMem(Result, Length(s));
for i := 1 to Length(s) do
begin
Result[i-1] :- s[i];
end;
end;
function PCharToString(s: PChar): String;
var
i: Integer;
begin
i := 0;
while s[i]<>#0 do
begin
SetLength(Result, i+1);
Result[i+1] := s[i];
end;
end;
← →
Андрей Жук © (2005-05-17 11:49) [1]А что за оператор :-? :)
← →
vidiv © (2005-05-17 11:49) [2]
function StringToPChar(s: String): PChar;
begin
getmem(Result, Length(s));
strpcopy(Result, s);
end;
function PCharToString(s: PChar): String;
begin
Result := strpas(s);
end;
А так сложнее?
← →
Prohodil Mimo © (2005-05-17 11:52) [3]А разве нет функции PChar() ?
← →
blackman © (2005-05-17 11:53) [4]>Prohodil Mimo © (17.05.05 11:52) [3]
Слишком сложно :)))
← →
DiamondShark © (2005-05-17 11:54) [5]Чепуха какая-то...
← →
Bronco © (2005-05-17 11:56) [6]Кода маловато, на зачОте не примут ;-)
← →
Prohodil Mimo © (2005-05-17 11:58) [7]Bronco © (17.05.05 11:56) [6]
Тогда предлагаю побитовый перенос, а не побайтовый, как в [0] :o)
← →
Игорь Шевченко © (2005-05-17 11:58) [8]Согласен с [5]
← →
Alexander Panov © (2005-05-17 11:59) [9]vidiv © (17.05.05 11:49) [2]
Значительно сложнее;)
Игорь Шевченко © (17.05.05 11:58) [8]
Согласен с [5]
Неее...
Ты просто не понял суперкода в [0].
← →
Calm © (2005-05-17 12:02) [10]я, признаться, тоже не понял :(
← →
DiamondShark © (2005-05-17 12:06) [11]
function StringToPChar(s: String): PChar;
var
i: Integer;
begin
ReallocMem(Result, Length(s));
Что, вот прямо так и реалок? А резалт, типа, изначально барабашкой иницализирован...
for i := 1 to Length(s) do
begin
Result[i-1] :- s[i];
end;
end;
Сильно. StrPLCopy объявлен некошерным.
Я так понял, основная идея -- распределить память под PChar и отвязаться от управляемого времени жизни строки. Угадал?
function StringToPChar(s: String): PChar;
begin
GetMem(Result, Length(s)+1); // кстати, таки +1
StrLCopy(Result, PChar(s), Length(s));
end;
Как бы ещё пользователей этой функции приучить FreeMem вызывать...
function PCharToString(s: PChar): String;
PChar прекрасно присваивается стрингу обычным оператором присваивания.
ЗЫ
Поцсмотрел на календарь.
Нет, всё-таки, 17 мая...
← →
Vovchik_A © (2005-05-17 12:10) [12]2DiamondShark © (17.05.05 12:06) [11]
>Как бы ещё пользователей этой функции приучить FreeMem вызывать...
5 баллов :)
← →
TUser © (2005-05-17 12:10) [13]А где пост "Обсуждение закрыто"?
← →
Bronco © (2005-05-17 12:14) [14]Это еще ничего, цветочки :-)
Для тех кто не в курсе, вот что лежит у нас в кладовке, в разделе "Прочее"
IncDay dmi 05.01.03 20:21
При создании бухгалтерской программы я столкнулся с
необходимостью изменить значение даты (класс TDateTime) путем добавления количества дней. Но в Delphi готовой функции не оказалось. Просмотрев в Delphi7 исходный текст функции IncMonth (добавление месяцев к дате), я решил создать функцию IncDay (добавление дней к дате).
Если у кого-то возникла подобная проблема, готов поделиться "исходником".
Сами исходники почему-то уже давно не скачиваются, но я их успел в свое время лицезреть, это тихий ужас...
← →
DiamondShark © (2005-05-17 12:15) [15]Да, всю мощь второй функции с первого взгляда не разглядел.
;)
← →
Alexander Panov © (2005-05-17 12:31) [16]DiamondShark © (17.05.05 12:15) [15]
Да, всю мощь второй функции с первого взгляда не разглядел.
-)))
Мда. Теперь желающие научиться преобразовывать String в PChar должны разобрать обе функции, исправить ошибки, и пользоваться исключительно ими для преобразований.
← →
Johnmen © (2005-05-17 12:33) [17]>Alexander Panov © (17.05.05 11:46)
У тебя слишком чёрный юмор.
← →
blackman © (2005-05-17 12:36) [18]>Alexander Panov © (17.05.05 12:31) [16]
Не наказывайте так строго. Мы больше не будем :)
← →
AlexKniga © (2005-05-17 12:39) [19]Как-то в кладовке лежала незабываемая функция под название толи NextDay, толи AddDay, точно не помню. Фунция прибавляла к дате TDataTime, переданной первым параметром, целое число дней (второй параметр).
У кого сохранилось сие творение вышлите, плиз, на мыло в анкете.
← →
AlexKniga © (2005-05-17 12:41) [20]Пока я писал свой пост, Bronco привел название той функции IncDay.
У кого сохранились исходники, выложите плиз.
← →
Bronco © (2005-05-17 13:02) [21]
> AlexKniga © (17.05.05 12:41) [20]
> У кого сохранились исходники, выложите плиз.
Угу, я б тоже не прочь сейчас взглянуть на тот шедевр :-))
← →
1008 © (2005-05-17 13:12) [22]Alexander Panov © (17.05.05 11:46)
А это ШТАТНЫХ средств мало?
← →
Nous Mellon © (2005-05-17 13:31) [23]
> Result[i-1] :- s[i];
Это неправильно. Правильно так Result[i-1] :-) s[i];
Вторую тоже долго рассматривал...
← →
Alexander Panov © (2005-05-17 13:33) [24]1008 © (17.05.05 13:12) [22]
А это ШТАТНЫХ средств мало?
так штатные средства, к сожалению, невозможно запомнить. -(
А эти функции нужно записать в отдельный юнит, положить в корневой каталог с проектами и просто ссылаться на него при необходимости.
← →
1008 © (2005-05-17 13:48) [25]Alexander Panov © (17.05.05 13:33) [24]
var
s:string;
p:pchar;
begin
...
p:=pchar(s);
...
s:=p;
Я только что опыть провёл, после прочитаного. Работает.
Порылся в Тейксера Пачеко, на 77 стр. (это для дельфи 5) сказано, что после использования AnsiString как PChar (как параметр в WinAPI функциях и процедурах) необходимо вызывать функцию: RealizeLength
← →
Alexander Panov © (2005-05-17 13:51) [26]1008 © (17.05.05 13:48) [25]
s:=p;
Опять же, к сожалению, немногие смогут запомнить такой громоздкий синтаксис-(
← →
Ega23 © (2005-05-17 13:53) [27]var
s:string;
p:pchar;
begin
...
p:=pchar(s);
...
s:=p;
Я только что опыть провёл, после прочитаного. Работает.
Ржал долго.
Фтопку.
← →
1008 © (2005-05-17 13:54) [28]Удалено модератором
Примечание: Научись себя вести
← →
AlexKniga © (2005-05-17 14:04) [29]1008
Не тормози. Хоть сегодня и не 1 апреля, но к шуткам будь готов всегда.
← →
Danilka © (2005-05-18 12:11) [30]Кстати. В модуле Sysutils есть интересная ф-я в тему: StrPas.
:)
← →
AlexKniga © (2005-05-18 12:59) [31]Bronco
IncDay найдена! См. http://delphimaster.net/view/14-1116403029/
← →
Bronco © (2005-05-18 14:25) [32]
> AlexKniga © (18.05.05 12:59) [31]
> Bronco
> IncDay найдена!
Да, спасибо. Уже распечатал и повесил на стенку :-)))
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.013 c