Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

переменная string. Поменять местами некоторые данные   Найти похожие ветки 

 
Phoenix9000 ©   (2005-05-20 15:11) [0]

Доброго времени суток.

Есть переменная date типа string.

В нее идет запись даты с помощью Datetostr() например:

25.12.1980

нужно сделаь так, чтобы в переменной date2 тоже типа string эта дата была записана как :

12.25.1980

Заранее спасибо за ответ


 
Ega23 ©   (2005-05-20 15:14) [1]

FormatDateTime + F1


 
Marser ©   (2005-05-20 15:17) [2]

var d:TDateTime;
begin
 d:=StrToDate("25.12.1980");
 caption:=formatdatetime("mm.dd.yyyy",d);


 
Jeer ©   (2005-05-20 15:21) [3]

s[3] := s[1]
s[6] := s[2]
s[1] := s[4]
s[2] := s[5]
s[4] := s[3]
s[5] := s[6]
s[3] := "."
s[6] := "."


 
Alexander Panov ©   (2005-05-20 15:23) [4]


> Phoenix9000 ©   (20.05.05 15:11)
> Доброго времени суток.
>
> Есть переменная date типа string.


Не надо использовать идентификаторы переменных, которые аналогичны названиям функций.


 
default ©   (2005-05-20 15:32) [5]

Jeer ©   (20.05.05 15:21) [3]
забавно:)
Вы бы в своём коде стали так писать или же ф-ции использовать?


 
evvcom ©   (2005-05-20 15:33) [6]


> Jeer ©   (20.05.05 15:21) [3]

var w: Word;
begin
 w := PWORD(@s[1])^;
 PWORD(@s[1])^ := PWORD(@s[4])^;
 PWORD(@s[4])^ := w;
end;


 
default ©   (2005-05-20 15:35) [7]

evvcom ©   (20.05.05 15:33) [6]
тут интерес то весь был в точках(без дополнительных переменных):) мы ведь знаем что они там всегда есть и стирая при перестановке не теряем никакой информации


 
evvcom ©   (2005-05-20 15:43) [8]


> default ©   (20.05.05 15:35) [7]

Я это понял, но тем не менее начиная с этого поста (Jeer ©   (20.05.05 15:21) [3]) можно смело ставить смайлики. Хотя новичка, не знающего [1], должно заинтересовать и [3], и [6], и есть еще варианты, и все они работают.


 
Jeer ©   (2005-05-20 15:47) [9]

default ©   (20.05.05 15:32) [5]

Jeer ©   (20.05.05 15:21) [3]
47 ns

Marser ©   (20.05.05 15:17) [2]
3105 ns


 
Jeer ©   (2005-05-20 15:50) [10]

evvcom ©   (20.05.05 15:33) [6]

25 ns !!!


 
VVV-First   (2005-05-20 16:04) [11]

В нее идет запись даты с помощью Datetostr() например:

25.12.1980


а что не прощебудет сразу записать в стрин , так как тебе надо

var
t:TDateTime;
begin
s := FormatDateTime("mm.dd.yyyy",T);
end;


 
evvcom ©   (2005-05-20 16:05) [12]

Ну, Marser ©   (20.05.05 15:17) [2] 3105 ns - это не корректно, это был чистый пример использования FormatDateTime, который должен делаться вместо DateToStr. Поэтому сравнивать на скорость этот пример просто неделикатно.


 
default ©   (2005-05-20 16:11) [13]


procedure TForm1.Button1Click(Sender: TObject);
var
 w: Word;
 s1: String;
 s2: PChar;
begin
 s1 := "25.12.1980";
 s2  := PChar(s1);
 w := PWord(@s2[0])^;
 PWord(@s2[0])^ := PWord(@s2[3])^;
 PWord(@s2[3])^ := w;
 Caption := s1
 // PChar для того чтобы избежать внутренних вызовов уникальности строки
 // при работе с типом String
end;

Jeer ©   (20.05.05 15:50) [10]
а так сколько будет?


 
evvcom ©   (2005-05-20 16:15) [14]


> // PChar для того чтобы избежать внутренних вызовов уникальности
> строки
>  // при работе с типом String

в [6] итак нет никаких "внутренних вызовов уникальности строки"


 
Jeer ©   (2005-05-20 16:19) [15]

Не знаю, поскольку вылетает:)


 
Jeer ©   (2005-05-20 16:21) [16]

evvcom ©   (20.05.05 16:05) [12]

Ну почему, сравнивать можно и нужно.
Применяемость зависит от ситуации и нужно знать варианты, методологические.


 
default ©   (2005-05-20 16:23) [17]

evvcom ©   (20.05.05 16:15) [14]
в CPU если посмотреть на код

procedure TForm1.Button1Click(Sender: TObject);
var
w: Word;
s: String;
begin
s := "25.12.1980";
w := PWORD(@s[1])^;
PWORD(@s[1])^ := PWORD(@s[4])^;
PWORD(@s[4])^ := w;
Caption := s
end;

то там видны вызововы UniqueStringA, к тому же они прилично длины по сравнению с реально требующимся кодом


 
default ©   (2005-05-20 16:31) [18]

Jeer ©   (20.05.05 16:19) [15]

var
 Form1: TForm1;
 s1: String;
 s2: PChar;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
w: Word;
begin
s1 := "25.12.1980";
s2  := PChar(s1);
w := PWord(@s2[0])^;
PWord(@s2[0])^ := PWord(@s2[3])^;
PWord(@s2[3])^ := w;
//// s2[4] := "7";
// Caption := s2[2];
Caption := s1
// PChar для того чтобы избежать внутренних вызовов уникальности строки
// при работе с типом String
end;


 
default ©   (2005-05-20 16:31) [19]

Jeer ©   (20.05.05 16:19) [15]

var
 Form1: TForm1;
 s1: String;
 s2: PChar;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
w: Word;
begin
s1 := "25.12.1980";
s2  := PChar(s1);
w := PWord(@s2[0])^;
PWord(@s2[0])^ := PWord(@s2[3])^;
PWord(@s2[3])^ := w;
Caption := s1
end;


 
evvcom ©   (2005-05-20 16:35) [20]


> то там видны вызововы UniqueStringA

у меня сейчас нет дельфей под руками, но что-то меня терзают смутные сомнения по поводу [17]... Приеду домой попробую. А если не влом, то можно сюда выложить увиденное?


 
Jeer ©   (2005-05-20 16:46) [21]

PWord(@s2[0])^ := PWord(@s2[3])^;

Слетает на D5.


 
Sha ©   (2005-05-20 16:53) [22]

Привет участникам соревнований!

procedure TForm1.Button4Click(Sender: TObject);
var
 s: string;
 p, q: pchar;
 w: word;
begin;
 s:="25.12.1980";

 UniqueString(s);
 p:=pointer(s); q:=p+3;
 w:=pword(p)^; pword(p)^:=pword(q)^; pword(q)^:=w;

 Caption:=s;
 end;


 
default ©   (2005-05-20 17:10) [23]

Jeer ©   (20.05.05 16:46) [21]
а на D6 нет
так и пришлось Sha вызвать UniqueString(s); чтобы потом преспокойно менять строку...


 
default ©   (2005-05-20 17:12) [24]

evvcom ©   (20.05.05 16:35) [20]
пробовал принтскрин+распечатка+сканирование+распознание, но распозналось криво, быстрее было бы руками набить...


 
default ©   (2005-05-20 17:14) [25]

к [24]
криво не из-за распечатывания(так пришлось...), а то что сдвинуто всё вышло


 
Sha ©   (2005-05-20 17:14) [26]

> default ©   (20.05.05 17:10) [23]

Если мы уверены, что строка уникальна, то вызывать не требуется.
Собственно сам обмен требует 6 машинных команд.


 
default ©   (2005-05-20 17:20) [27]

Sha ©   (20.05.05 17:14) [26]
почему код [19] работает на D6, а на D5 не работает?


 
default ©   (2005-05-20 17:23) [28]

Sha ©   (20.05.05 17:14) [26]
"Если мы уверены, что строка уникальна, то вызывать не требуется."
НЕТ!
код [13] вообще не работает(кроме как в режиме отладки)
поставив UniqueString(s1); всё заработало
так что эта штука имеет вес и когда нет дублей...


 
Jeer ©   (2005-05-20 17:24) [29]

Sha ©   (20.05.05 16:53) [22]

9 ns

На грани чувствительности:)
А может и за гранью.


 
default ©   (2005-05-20 17:28) [30]

Jeer ©   (20.05.05 17:24) [29]
моя идея!:)
если писать

procedure TForm1.Button1Click(Sender: TObject);
var
w: Word;
s1: String;
s2: PChar;
begin
s1 := "25.12.1980";
UniqueString(s1); s2  := PChar(s1);
w := PWord(@s2[0])^;
PWord(@s2[0])^ := PWord(@s2[3])^;
PWord(@s2[3])^ := w;
Caption := s1
// PChar для того чтобы избежать внутренних вызовов уникальности строки
// при работе с типом String
end;

то работает!
учитывая что нет дублей строки я этот вызов не поставил и ...не заработало


 
Jeer ©   (2005-05-20 17:33) [31]

default ©   (20.05.05 17:28) [30]

Твоя - так твоя.
12 ns


 
Jeer ©   (2005-05-20 17:42) [32]

поправка из-за глюков:

Jeer: 47-49 ns
Sha:  45-46 ns ns
Defunct: 43-44 ns

P-IV 2GHz 1Gb


 
Sha ©   (2005-05-20 17:43) [33]

> default ©   (20.05.05 17:20) [27]
почему код [19] работает на D6, а на D5 не работает?

Ну, код [19] - пример того, как делать не надо.
Он и в D6 работать не будет, если все используемые переменные объявить внутри процедуры.

Дело тут в том, что присваививания значений локальным и глобальным строкам в D6 используются разные процедуры.
Локальные просто ссылаются на RO-строку (отсюда AV),
а глобальные копируют ее содержимое (поэтому все работает).

Вызов UniqueString гарантирует нам, что строка не RO.

> default ©   (20.05.05 17:23) [28]
>> Sha ©   (20.05.05 17:14) [26]
>> "Если мы уверены, что строка уникальна, то вызывать не требуется."
> НЕТ!

Не спорь, пока не посмотришь в окно CPU :)


 
Юрий Зотов ©   (2005-05-20 17:45) [34]

> Jeer ©   (20.05.05 17:24) [29]

Дык... если автор призы от Борланда берет за оптимальный ассемблеровский код - что ж удивляться-то?
:о)


 
Jeer ©   (2005-05-20 17:47) [35]

Я удивляюсь ?
Наоборот, очень рад, что это наши ребята берут призы.
А об успехах Шарохова знаю, смотрел и не раз его рейтинг.


 
Игорь Шевченко ©   (2005-05-20 17:49) [36]

Я бы сразу писал в нужном виде через FormatDateTime, или, если исходная строка получается извне, то так, как в [3], потому что оно понятнее программисту :)


 
Jeer ©   (2005-05-20 17:52) [37]

Игорь Шевченко ©   (20.05.05 17:49) [36]

Собственно, поэтому и был приведен данный вариант, из методических соображений, как возможность использования незначимого.

Программисту - это понятно, а профи - кто же его поймет:))


 
Sha ©   (2005-05-20 17:53) [38]

> Jeer ©   (20.05.05 17:42) [32]
Думаю, измерения не совсем точны.
Для того, чтобы убедиться в этом, попробуй замерить время выполнения пустого оператора ";" :)

Кроме того, вызов UniqueString не должен входить в измеряемый интервал времени, т.к. в реальном приложении строка получается в результате вычислений и, как правило, уникальна и уж точно не является RO-константой.


 
Jeer ©   (2005-05-20 18:04) [39]

Пустой цикл замерить невозможно (~1 ns)

После выноса UniqueString(s)

Jeer is = 49 ns
Sha is = 44 ns
Defunct is = 45 ns


 
Jeer ©   (2005-05-20 18:08) [40]

Defunct:

0 [ns] - s2 := PChar(s1);
0 [ns] - w := PWord(@s2[0])^;
12 [ns] - PWord(@s2[0])^ := PWord(@s2[3])^;
45 [ns] - PWord(@s2[3])^ := w;



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.014 c
1-1116528596
syte_ser78
2005-05-19 22:49
2005.06.06
проблемы с закрытием приложения.


14-1116519847
Plex
2005-05-19 20:24
2005.06.06
футбоол


1-1116608902
френк
2005-05-20 21:08
2005.06.06
путь к сервису


4-1113647803
HDD
2005-04-16 14:36
2005.06.06
Можно ли из Delphi напрямую обратиться к жесткому диску


1-1116853365
Foggot
2005-05-23 17:02
2005.06.06
Открытие окон интернета





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