Текущий архив: 2008.11.09;
Скачать: CL | DM;
Вниз
Перевод Ф.И.О. в верхний регистр Найти похожие ветки
← →
zdm © (2008-09-29 14:35) [0]Добрый день. Вот такая вот задачка, юзер вбивает фамилию, имя, отчество и после нажатия пробела между, соответсвенно фам, имени первые буквы должны переводиться в верхний регистр. Ни чего умнее как
procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
я не придумал... но почемуто срабатывает когда переменная q-глобальная и если очень быстро набирать, то косяк получается, как будто комп запаздывает за набиранием и переводятся не те символы которые нужны...
begin
if q=1 then //был пробел, следующий символ переводим в верхний регистр
begin
Edit1.Text:=Copy(edit1.Text,1,Length(Edit1.Text)-1)+AnsiUpperCase(copy(Edit1.Text,Length(Edit1.Text),1));
end;
//ловим нажатие пробела
if key = VK_SPACE then q:=1 else q:=0;
end;
← →
{RASkov} © (2008-09-29 14:40) [1]Плохой алгоритм.... а если два пробела нажать?
Лучше по окончанию ввода сделать нужное...
← →
Юрий Зотов © (2008-09-29 14:41) [2]Будет гораздо проще переводить регистр не сразу, а в событии OnExit. То есть, после полного окончания ввода.
← →
{RASkov} © (2008-09-29 14:42) [3]В данном алгоритме кроме двух пробелов еще кучу косяков можно найти.... например нажатие Del перед первой загавной и впечатывании следом другой буквы.... Вообщем туфта идея :)
← →
zdm © (2008-09-29 14:43) [4]согласен, на счет двух пробелов и прочих ньюансов это потом.. в Word допустим, все в реальном времени отрабатывается....
← →
{RASkov} © (2008-09-29 14:44) [5]А если делать чтоб при вводе, то можно добится всего этого... т.е. лешить косяков алгоритм, но он будет ресурсоемким(времязатратным).... В общем - не оптимальным....
← →
Anatoly Podgoretsky © (2008-09-29 14:44) [6]Это еще пользователь не перемещался мышкой по органу, вот тут и кырдык придет.
← →
{RASkov} © (2008-09-29 14:46) [7]> [4] zdm © (29.09.08 14:43)
> в Word допустим, все в реальном времени отрабатывается....
Не совсем так.... Там очень по умному сделано.... тебе долеко до этого, поверь :)
Т.е. там не две строчки кода и даже не десять и не..... вобщем там целая программа...
← →
zdm © (2008-09-29 14:47) [8]хорошо, при окончательной обработке тогда как лучше поступить? бежать посимвольно циклом на Pos(" ")? искать delemiter? .. направте в нужное русло. спасибо.
← →
{RASkov} © (2008-09-29 14:49) [9]> [4] zdm © (29.09.08 14:43)
> согласен, на счет двух пробелов и прочих ньюансов это потом..
На счет "потом".... если сразу не сделаешь "скелет" своего алгоритма, то потом просто придется заново все придумывать с нуля - поверь.
← →
zdm © (2008-09-29 14:50) [10]пусть и далеко, я ворд и не собираюсь переписывать я знаю что там в несколько потоков каждый как отдельная программа я образно сказал что первое пришло по аналогии на ум...чо юродствовать то? мне просто интересно уже стало
1. Как грамотнее, но это уже почти выяснили, такая мысль и была первой. но вот как лучше подскажите.
2. Как допустим в этих же условиях при вводе просто отработать перевод в верхний регистр следующего символа после пробела
← →
{RASkov} © (2008-09-29 14:53) [11]> [8] zdm © (29.09.08 14:47)
function UpperFirstCharWords(const S: String): String;
var N: Integer; Space, OldSpace: Boolean;
begin
Result:=S; Space:=True;
for N:= 1 to Length(Result) do begin
OldSpace:=Space; Space:=Result[N]=#32;
if (not Space and (OldSpace<>Space)) then
Result[N]:=AnsiUpperCase(Result[N])[1];
end;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Text:=UpperFirstCharWords(Edit1.Text);
end;
← →
Юрий Зотов © (2008-09-29 14:56) [12]procedure TForm1.Edit1Exit(Sender: TObject);
begin
S := Trim(Edit.Text);
if S = "" then
Exit;
S[1] := AnsiUpperCase(S[1]);
i := 2;
n := 1;
while (i <= Length(S)) and (n < 3) do
begin
if (S[i - 1] = " ") and (S[i] <> " ") then
begin
S[i] := AnsiUpperCase(S[i]);
Inc(n);
end;
Inc(i);
end;
Edit.Text := S;
end;
← →
zdm © (2008-09-29 15:03) [13]Спасибо приогромнейшее
← →
Ega23 © (2008-09-29 15:05) [14]Хочу заметить, что:
1. Бывают составные фамилии: Бонч-Бруевич, Салтыков-Щедрин.
2. Бывают составные имена: Магомед-Гаджи
3. Бывают составные отчества: ...-Оглы.
← →
Поросенок Винни-Пух © (2008-09-29 15:08) [15]А еще есть "Джордж Буш младший"
так что маета все это.
← →
zdm © (2008-09-29 15:08) [16]
> Ega23 © (29.09.08 15:05) [14]
Спасибо за наводку.
← →
zdm © (2008-09-29 15:10) [17]
> Поросенок Винни-Пух © (29.09.08 15:08) [15]
Тоже верно, но подрозумевается ввод по большей части, классики... Иванов Иван Иванович, а где "хитрые", они не так часто, то тут уже юзеру повнимательнее надо... ну хоть както хотелось облегчить задачку им..
← →
zdm © (2008-09-29 15:13) [18]не совсем сюда, но все таки... вопрос-то в принципе больше состоял в чувствительности к регистру FireBird, тоже пытался разные извращения делать на LIKE, понимаю что уже почти офтоп, но всетаки, может кто находил какие пути? слышал, что в настройке самой СУБД это можно сделать.. но как не могу найти.
← →
Ega23 © (2008-09-29 15:18) [19]upper(text) like () + ANSIUpperCase на клиенте.
← →
zdm © (2008-09-29 15:30) [20]но он же весь текст переведет вверх? или я не прав?
> Ega23 ©
Если Вам не сложно, можно текст запроса... я делал раньше на Like - where текст Like AnsiLowerUperCase .. or AnsiUpperCase // но он берет либо все вверхнем либо все в нижнем.. можно поподробней пожалуйста
← →
Anatoly Podgoretsky © (2008-09-29 15:31) [21]> Поросенок Винни-Пух (29.09.2008 15:08:15) [15]
При том в английском будет заглавная
← →
Anatoly Podgoretsky © (2008-09-29 15:33) [22]> zdm (29.09.2008 15:10:17) [17]
При автоматическом обязательным переводом, ты им задачу сделаешь невыполнимой.
← →
Правильный$Вася (2008-09-29 15:34) [23]
> Ega23 © (29.09.08 15:05) [14]
мало того
некоторые отдельные части их могут писаться с маленькой
со строчной могут писаться и отдельные элементы типа д"Артаньян
только не говорите, что в русском языке нет таких фамилий
я лично знаю некоторых
← →
Anatoly Podgoretsky © (2008-09-29 15:36) [24]> zdm (29.09.2008 15:30:20) [20]
Важно, что бы справа и слева было одинаково!
← →
zdm © (2008-09-29 15:38) [25]ну я и хочу ..найди где Like %а% пусть ищет все где а большие или маленькие... Like %"% пусть найдет д"АрТАНьяна
← →
Anatoly Podgoretsky © (2008-09-29 15:39) [26]> Правильный$Вася (29.09.2008 15:34:23) [23]
Вы его все больше и больше расстраиваете его сердечную мышцу
← →
zdm © (2008-09-29 15:40) [27]с д"артаньяном кстати проще.. он найдет по " не важно тут регистр :)
← →
Правильный$Вася (2008-09-29 15:54) [28]
> с д"артаньяном кстати проще
неужтоЛуи де Клермон, сеньор д"Амбуаз граф де Бюсси
← →
Smile (2008-09-29 15:56) [29]Мне кажется, что вопрос какой-то не совсем корректный.
Ведь когда речь идет об Edit1, то это всего лишь отображение (к чему-то еще приплели и Word), а затем автор упомянул FireBird, который никакого отношения к EDit1 не имеет.
Ну, и, соответственно, ответы на пост...
← →
Ega23 © (2008-09-29 15:58) [30]
> ну я и хочу ..найди где Like %а% пусть ищет все где а большие
> или маленькие... Like %"% пусть найдет д"АрТАНьяна
Приведи и левую и правую часть к одному и тому же регистру.
Код дать не могу, бо не шибко с FB работал. Но сам принцип везде одинаковый.Select * from table where Upper(Field)="ИВАНОВ".
Может быть Upper, может быть UpperCase - смотри в документации.
Ну а ИВАНОВ - это ты уже на клиенте, с которого ищешь, подставляй через ANSIUpperCase.
> только не говорите, что в русском языке нет таких фамилий
Да есть, я не спорю. Более того, есть и такие, где фамилии как таковой нет. Иностранцы, например. В частности - монголы. У них только имя и отчество.
← →
Anatoly Podgoretsky © (2008-09-29 16:02) [31]> Smile (29.09.2008 15:56:29) [29]
Так бардак автор устраивает.
← →
zdm © (2008-09-29 16:04) [32]аааааааааааааааааа. все, понял. спасибище.. я думал Анатолий в очередной раз издевается :) на счет левой и правой части...
← →
zdm © (2008-09-29 16:05) [33]
> Smile (29.09.08 15:56) [29]
прочти [18] я сказал что офтоп немного ухожу..я извинился за это. Всем спасибо за участие, снимаю вопрос
← →
Leonid Troyanovsky © (2008-09-29 16:11) [34]
> Ega23 © (29.09.08 15:58) [30]
> как таковой нет. Иностранцы, например. В частности - монголы.
> У них только имя и отчество.
Чингизхановичи?
--
Regards, LVT.
← →
Ega23 © (2008-09-29 16:14) [35]
> Чингизхановичи?
У меня одноклассник был монгол. Полное имя - Дамбдинсурэн Зузаан.
← →
Ega23 © (2008-09-29 16:17) [36]Кстати. У чехов, вроде, отчества нет.
Приезжал парень на диссер в институт в Дубне (их там много из Чехии приезжает). Ну мы с ним спелись (и спились.. .:) ). Он нас упросил взять его с собой на дроп-зону (когда я ещё прыгал). Ну а там бумаги оформлять. Типа, как отчество? А он и говорит, что, мол, нету. Да и не знает, что это такое.
Ну там все просто решили. "Как отца зовут?" "Ян". Ну и записали Вацлав Янович Новотны. :)
← →
Anatoly Podgoretsky © (2008-09-29 16:26) [37]> Ega23 (29.09.2008 16:17:36) [36]
Ну у нас тоже отчеств в государстве нет, пострадали все национальности, у которых есть.
Вот так и живу без отчества и отечества.
← →
Поросенок Винни-Пух © (2008-09-29 16:28) [38]У меня одноклассник был монгол. Полное имя - Дамбдинсурэн Зузаан.
А уменя был знакомый Цигра Александр Гуго-Вальдемарович.
← →
zdm © (2008-09-29 16:39) [39]и это значит я в офтоп вошел ? :)
← →
zdm © (2008-09-29 16:45) [40]забавная но предсказуемологичная вещь происходит теперь... в базе порядка 150-200 записей по которой идет поиск и поэтому сделал Edit для быстрого поиска.. и когда говорю Upper все забавненько так переводится в верхний регистр.. в принципе ни чего страшного, но смотрится не очень.. единственная мысль это изначально для отображения переводить в верхний , либо делать окно для ввода параметров поиска
Страницы: 1 2 вся ветка
Текущий архив: 2008.11.09;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.012 c