удалить все русские буквы из текста. как?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by 1n0y, 6 Jan 2010.

  1. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    сабж. делфи. помогите пажалста :)
     
    1 person likes this.
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    вот примитивный алгоритм. (pascal не люблю)
    тк строка это массив то определенную букву можно получить так str[5] - 5 буква... есть такая функция ord - получить ASCII код символа. выведи для начала ord('а') ord('Я') посмотри диапазон чисел потом
    делаешь 2 строки одинакового размера
    первая исходная - for ом по всем элементам if ord(str)<ord('а') then dest[k]=str;

    типа если это не русская буква заносим символ в новую строку - в итоге в новой строке будут все встречающиеся не русские символы.

    может можно и красивее реализовать ) хз
     
    _________________________
    1 person likes this.
  3. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    Ну хоть бы и так:
     
    1 person likes this.
  4. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    заюзал StringReplace, повторив 33 раза со всеми буквами :)
    не очень красиво, но работает :)
     
  5. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    I like the way you move!
    Отличный выход :)
     
    1 person likes this.
  6. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Вот набросал:
    Code:
    procedure DeleteRus(text:string);
    var c:char;
    begin
    for c:='А' to 'я' do
    text:=StringReplace(text,с,'',[rfReplaceAll, rfIgnoreCase]);
    end;
    
    Пример:
    Code:
    var s:string;
    begin
    s:='хзчтоздgdfgsds36есь';
    DeleteRus(s);
    end;
    
     
  7. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    patcher, спасибо :) жаль что в голову вчера такое не пришло

    но менять наверное нечего небуду, ибо приделал опции с выбором символов, которые нужно удалять :)

    [​IMG]
     
  8. Linkus

    Linkus Member

    Joined:
    20 Dec 2008
    Messages:
    168
    Likes Received:
    15
    Reputations:
    -1
    0_o те не лень было все эти чекбоксы ставить??
     
  9. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    эээ на будущее - это решается одним текстовым полем, в которое юзер вбивает нужные символы для замены...
    50 чекбоксов - это сильно. В мемы юзабилити!
     
  10. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    да я с делфи знаком неделю буквально, что первое подруку попалось, то и поставил. притом задача была сделать прогу с кучей всяких ненужных настроек, да и вообще сымитировать бурную деятельность и гибкость программы :)

    расскажите как сделать одно текстовое поле? :rolleyes:
     
    #10 1n0y, 7 Jan 2010
    Last edited: 7 Jan 2010
  11. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Вот набросал процедурку:
    Code:
    procedure DeleteChars(chars:string; Text:TStrings);
    var i:integer;
    begin
    for i:=1 to length(chars) do
    Text.Text:=StringReplace(Text.Text, chars[i], '', [rfReplaceAll, rfIgnoreCase]);
    end;
    
    пример использования:
    Code:
    DeleteChars(Edit1.Text, Memo1.Lines);
    
    при выполнения этого кода все символы, находящиися в Едит1 будут удалены из Memo1
     
  12. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Помню курсе на 3-ем такую задачку на assembler'е решал :)
     
  13. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    блин, все ваши методы лажа, чекбоксы рулят xD
    вот наилучшая реализация такой проги: скриншот
    Код для FormOnCreate:
    Code:
    procedure TForm1.FormCreate(Sender: TObject);
    var b:byte; c:tCheckBox; e:tEdit; u:tButton; x,y,w,t:word;
    begin
    font:=screen.MenuFont;
    canvas.Font:=font;
    x:=8;y:=8;w:=0;
    for b:=32 to 255 do begin
    c:=tCheckBox.Create(self);c.Parent:=self;
    c.Left:=x;c.Top:=y;c.Caption:=chr(b)+#32;
    c.Hint:=c.Caption;c.ShowHint:=true;
    c.Width:=canvas.TextWidth(c.Caption)+16;
    c.Name:='c'+inttostr(b);c.Font:=canvas.Font;c.Show;
    c.Checked:=(b>=$C0)or(b=$A8)or(b=$B8);
    if b=255 then break;
    t:=c.Width+8;
    if t>w then w:=t;
    inc(y,c.Height+8);
    if y>clientHeight-18 then
    begin inc(x,w);y:=8;end;
    end;
    clientWidth:=x+w;
    e:=tEdit.Create(self);e.Parent:=self;
    e.Left:=8;e.Top:=clientHeight-9;
    e.AutoSize:=false;e.Width:=(clientWidth div 3)*2;
    e.Name:='ee';e.Text:='test1АБВгде123';e.Show;
    clientHeight:=e.Top+e.Height+9;
    u:=tbutton.Create(self);u.Parent:=self;
    u.Left:=e.Left*2+e.Width;u.Top:=e.Top;
    u.Height:=e.Height;u.Width:=clientWidth-u.Left-9;
    u.Caption:='Remove selected chars';
    u.OnClick:=ButtonClick;
    end;
    Код для ButtonClick:
    Code:
    procedure TForm1.ButtonClick(Sender: TObject);
    var k:word; b:byte; s:string;
    begin
    s:=tEdit(FindComponent('ee')).Text;
    if length(s)=0 then exit;
    for k:=1 to length(s)do begin
    b:=ord(s[k]);if b<32 then b:=1 else
    if tCheckBox(FindComponent('c'+inttostr(b))).Checked
    then b:=1;s[k]:=chr(b);
    end;k:=1;
    while k<=length(s)do if s[k]=#1 then delete(s,k,1)else inc(k);
    tEdit(FindComponent('ee')).Text:=s;
    application.MessageBox('All selected chars removed!','');
    end;
    не забудьте также прописать FormCaption! это самое главное!!! :D :D :D
     
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Суперчитаемый код *ROFL*
     
  15. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    Если б чекбоксы были в одну колонку, то да, согласен, а так не дотягивает.
     
  16. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    это обфускация xD
    шутка, я всегда так пишу, это еще я строки покороче сделал, обычно у меня строка такойже длины как окно компилятора - чтобы как можно больше кода на одном экране было видно =)

    для тебя специально могу VIP версию написать - тока я неуверен что у тя разрешение экрана позволит видеть все чекбоксы)))
     
  17. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    если устроишься куда-то работать или будешь писать код не один - будешь анально наказан
     
    _________________________