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

Вниз

регистр букв   Найти похожие ветки 

 
rosl   (2006-02-14 02:55) [0]

народ. принимаю некий список в свою базу из файла dbf
у меня поле в name фио клиентов через пробел, т.е. Иванов Иван Иванович. А в файле для загрузки (сформированном в др. программе) фио без разделителей - ИвановИванИванович. Есть правда регистр букв. имена, фамилии и отчества с большой буквы. как бы проставить между ними пробелы?


 
Anatoly Podgoretsky ©   (2006-02-14 09:12) [1]

Дурдом какой то


 
umbra ©   (2006-02-14 10:44) [2]


function SplitByCapital(src: string): string;
const
 delims = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ";
var
 first, count, i: integer;

begin
 first := 1;
 for  i :=2 to Length(src) do
   begin
     if IsDelimiter(delims, src, i) then
      begin
        last := i - first;
        Result := MidStr(src, first, count) + " ";
        first := i;
      end;
   end;
 SetLength(Result, Length(Result) - 1);  
end;


 
Desdechado ©   (2006-02-14 12:22) [3]

можно проще
function SplitByCapital(src: string): string;
const
delims = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ";
var
i: Integer;
begin
result := src;
for i := 1 to Length( delims ) do
 result := StringReplace( result, delims[i], " " + delims[i] );
result := Trim( result );
end;


 
umbra ©   (2006-02-14 13:52) [4]

точно. еще с одной функцией для строк познакомился :)


 
Johnmen ©   (2006-02-14 13:55) [5]

Ещё проще, и значительно быстрее

if s[i] in [ #128..#159,#240] then <запоминаем позицию>
...
<выделяем место под результат, место зачищаем>
<по всем позициям мувим куски в выделенное место>


 
umbra ©   (2006-02-14 14:09) [6]

2 Johnmen ©   (14.02.06 13:55) [5]


> Ещё проще, и значительно быстрее
>

только для СP866


 
Johnmen ©   (2006-02-14 14:13) [7]


> umbra ©   (14.02.06 14:09) [6]
> только для СP866


А это что? :)
И почему быстрее?
И для чего не быстрее?


 
atruhin ©   (2006-02-14 14:19) [8]

>>только для СP866
Во всех современных кодировках русские буквы "идут" постледовательно. Раньше была какая то кодировка где был разрыв, но это было давно и уже не правда :)


 
umbra ©   (2006-02-14 14:25) [9]

2 atruhin ©   (14.02.06 14:19) [8]

в [5] указаны коды больших русских букв для кириллицы ДОС (СP866). Для кириллицы Виндовс нужен уже другой диапазон, для КОИ8 - третий и т.д.


 
Johnmen ©   (2006-02-14 14:30) [10]

Причём тут кодировка вообще? Мы говорим про принцип.


 
umbra ©   (2006-02-14 14:38) [11]

а в принципе StringReplace и делает то, что описано в [5]


 
Johnmen ©   (2006-02-14 14:43) [12]

Только по результату в данном случае.
Но она это делает не так. В принципиальных моментах.


 
atruhin ©   (2006-02-14 14:51) [13]

Для данного примера [3] проще и лучше. Если брать большой текст, то [5] будет намного быстрее. Кодировка тут вообще ни причем. Если нужно с поддержкой кодировок то буфер или диапазон создаем динамически AnsiUpperCase("абв...эюя"), если нужно еще быстрее диапазон создаем 1 раз в момент запыска программы.


 
Johnmen ©   (2006-02-14 14:56) [14]


> Для данного примера [3] проще и лучше.


"Да не согласен я!" (с)


 
umbra ©   (2006-02-14 15:00) [15]

2 Johnmen ©   (14.02.06 14:43) [12]

да, способы конечно разные. И способ из [5] наверное быстрее, поскольку его скорость не зависит от количества искомых символов, как у StringReplace


 
Desdechado ©   (2006-02-14 15:48) [16]

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


 
atruhin ©   (2006-02-14 16:04) [17]

>>"Да не согласен я!" (с)
Хорошо! Проще, проще и вполне подходит! :)
Хотя я бы сделал так:                  

GetMem( ptr, Length(Str)*2 );
FillChar(Ptr[0],Length(Str)*2, #32);
Len := 0;
for i := 1 to Length(Str) do begin
 inc(Len);
 if str[i] not in [ #128..#159,#240]
    then Ptr[Len]:=str[i];
end;
SetString(Result,ptr,len+1);
FreeMem( ptr );


 
Johnmen ©   (2006-02-14 16:24) [18]

>atruhin ©   (14.02.06 16:04) [17]

Опуская ошибки и глядя только на суть, можно сказать, что это будет быстро, но всё же медленнее, чем гонять байты оптом, а не по одному...:)


 
atruhin ©   (2006-02-14 19:00) [19]

>>но всё же медленнее, чем гонять байты оптом, а не по одному...:)
Думаю в зависимости от длинны отдельных слов, если слова длиные то согласен, при средней длинне 5-9 байт (имя/фамилия) готов спорить. :) Думаю накладные расходы на move, с учетом ее анализа длинны буфера, наложения буфера, инкрементного/декрементного переноса, переноса по несколько байт будут гораздо больше чем перенос этих байт.
PS. А ошибки, писал прямо здесь, держа в одной руке бокал с вином. :)


 
Johnmen ©   (2006-02-14 23:28) [20]

>atruhin ©   (14.02.06 19:00) [19]

Думаешь неправильно. Будем спорить...:)
Завтра. Сейчас спать...


 
rosl   (2006-02-15 01:51) [21]

спасибо всем. восполььзовался StringReplace. всё работает.



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

Форум: "Базы";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.013 c
15-1142582154
Vlad Oshin
2006-03-17 10:55
2006.04.09
Можно ли в HP 6L 5L 1100 1200 печатать на рулонной бумаге?


11-1124346950
ImPuls$$
2005-08-18 10:35
2006.04.09
Шрифты в owner-drawn ListBox


15-1133314811
Delphi5.01
2005-11-30 04:40
2006.04.09
Прошу оценить и высказать личное мнение


3-1139644942
John_Doe
2006-02-11 11:02
2006.04.09
Взять из таблицы записи со значениями из комбобокса.


15-1142588143
LordOfRock
2006-03-17 12:35
2006.04.09
Учебник по Firebird





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