Главная страница
    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.014 c
15-1142927887
Логин
2006-03-21 10:58
2006.04.09
Общий доступ в ИНЕТ


5-1128573607
DimaBr
2005-10-06 08:40
2006.04.09
Чудеса с TComboBoxEx


2-1143382427
Serzh
2006-03-26 18:13
2006.04.09
Рабочая папка


2-1143470623
el-magnifico
2006-03-27 18:43
2006.04.09
запуск приложения


15-1142594228
Pazitron_Brain
2006-03-17 14:17
2006.04.09
Не предоставят ли мне скрипт этого форума?...





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