Записки сисадмина
Алексей Никипольский
Пятница, 03.05.2024, 17:29
 
Меню
Настройка windows XP [38]
тонкости настройки, скрытые возможности
Программирование [8]
Нюансы, примеры, мои наработки и прочая полезная информация
Защита [28]
Компьютера, данных, интернет соединений и прочая полезная информация по защите
Обзор новинок [15]
Новинки ПО и железа
Обмен опытом [20]
Заработок в сети [9]
Все виды заработка в сети интернет, обзор, анализ, рекомендации
Распознование [10]
Все о методах и способах распознавания графической информации. Взлом капчи, методы и способы анализа...
Электронные книги [4]
По PHP CSS SQL PERL программированию Всё что есть в свободном доступе в интернете на разных ресурсах.
WEB программирование [9]
Всё о программировании WEB PHP Java PERL HTTP HTML и т.п.
Взлом [6]
методика взлома, примеры взлома, способы защиты от взлома
Онлайн сервисы [2]
Полезные сервисы онлайн
Администрирование [27]
Опыт системного администрирования
Статистика
Календарь
«  Февраль 2011  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28
Главная » 2011 » Февраль » 25 » Замена в тексте участков строк на заданные строки
23:49
Замена в тексте участков строк на заданные строки

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

реализация класса:
seakgReplaceInText.h


#ifndef seakgReplaceInTextH
#define seakgReplaceInTextH
//-----------------------------------------------------------------------------------------
#include <vcl.h>
#include <vector.h>
//-----------------------------------------------------------------------------------------
struct replInOut {    AnsiString in;    AnsiString out;};
//-----------------------------------------------------------------------------------------
typedef void (*nowState)(int progress);
class seakgReplaceInText
{    public:         seakgReplaceInText() {};
         void setListReplaces(AnsiString list);
         AnsiString Replace(AnsiString text, bool registr, nowState event);
    private:         void addNewReplace(AnsiString in, AnsiString out);
         void addRasparsStringAndAdd(AnsiString str);
         vector <replInOut> listReplaces;
         nowState ff;};
//-----------------------------------------------------------------------------------------
void seakgReplaceInText::addNewReplace(AnsiString in, AnsiString out)
{    if(in.Length() == 0) return;
    replInOut new_replace;
    new_replace.in = in;
    new_replace.out = out;
    listReplaces.push_back(new_replace);};
//-----------------------------------------------------------------------------------------
void seakgReplaceInText::addRasparsStringAndAdd(AnsiString str)
{  AnsiString kov = "\"";
    if((str.Pos("=")==0) || (str.Pos(";")==0) || (str.Pos(kov)==0)) return;
    AnsiString out = str;
    AnsiString in = out.SubString(1, out.Pos("=") - 1);
    out.Delete(1, out.Pos("=") );
    out = out.SubString(1, out.Pos(";") - 1 ); //оставляем строчку до ;
    in.Delete(1, in.Pos(kov));
    out.Delete(1, out.Pos(kov) );
    for(int i = in.Length(); i > 0; i--)
    {        if( in[i] == kov[1] )
        {   in = in.SubString(1, i - 1);  break; };
    };
    for(int i = out.Length(); i > 0; i--)
    {        if( out[i] == kov[1] )
        {            out = out.SubString(1, i - 1);
            break;      };
    };
    addNewReplace(in, out);};
//-----------------------------------------------------------------------------------------
void seakgReplaceInText::setListReplaces(AnsiString list)
{    listReplaces.clear();
    AnsiString str = list;
    while( str.Pos(";") > 0)
    {  AnsiString str1 = str.SubString(1, str.Pos(";"));
        str.Delete(1, str.Pos(";"));
        addRasparsStringAndAdd(str1);
    };};
//-----------------------------------------------------------------------------------------
AnsiString seakgReplaceInText::Replace(AnsiString text, bool registr, nowState event)
{    int length = text.Length();
    AnsiString result;
    while ( text.Length() != 0 )
    {  bool b = false;
        for(unsigned int i = 0; i < listReplaces.size(); i++ )
        {   int len = listReplaces[i].in.Length();
            if( registr == true )
            { if ( text.SubString( 1, len ) == listReplaces[i].in )
                {  text.Delete(1, len );
                    result = result  + listReplaces[i].out;
                    b = true;
                    break;  };
            }
            else
            {  if ( text.SubString( 1, len ).UpperCase() == 
                     listReplaces[i].in.UpperCase() )
                {  text.Delete(1, len );
                    result = result  + listReplaces[i].out;
                    b = true;
                    break;               };
            };
        };
        if( b == false)
        {            result = result + text.SubString( 1, 1 );
            text.Delete(1, 1 );        };
        event(length - text.Length());
    };
    return result;
};
#endif


пример использования:
на форме:
TButton *Button1;
TMemo *Memo1;TMemo *Memo2;TMemo *Memo3;
TCGauge *CGauge1;
TCheckBox *CheckBox1;

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "seakgReplaceInText.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
seakgReplaceInText repl;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner){}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{    repl.setListReplaces( Memo3->Lines->Text );
    Memo1Change(Sender);}
//---------------------------------------------------------------------------
void eventProcess(int i)
{    Form1->CGauge1->Progress = i;};
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Change(TObject *Sender)
{    Form1->CGauge1->MaxValue = Memo1->Lines->Text.Length();
    Memo2->Lines->Text = repl.Replace(Memo1->Lines->Text, CheckBox1->Checked, eventProcess);}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{    Button1Click(Sender);}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{    Memo1Change(Sender);}
//---------------------------------------------------------------------------


пример результата работы
вводим в мемо1: "Привет, Алексей!"
в мемо2: "Privyet, Alyexyey!"

Рекомендую Вам также почитать:


  • CSS
  • Как защитить флэш-карту от вирусов
  • Создание регулярных выражений онлайн
  • Бюджетная лопата - Смартшет за 13000 рублей
  • Cоздаём простейший web-браузер
  • Запрет USB через групповые политики
  • Обход и взлом firewall
  • Параметры установки Windows XP
  • разблокировать Диспетчер задач через реестр
  • Windows XP и Windows Vista – наращивание возможностей сети

  • Загрузить, скачать Программирование, Замена в тексте участков строк на заданные строки бесплатно.
    Скачать Замена в тексте участков строк на заданные строки бесплатно
    Замена в тексте участков строк на заданные строки бесплатно и без регистрации.

    При копировании материала указывайте источник

    Замена в тексте участков строк на заданные строки download free


    Категория: Программирование | Просмотров: 2894 | Добавил: Никипольский-Алексей | Теги: Замена участков строк | Рейтинг: 5.0/1
    Всего комментариев: 3
    avatar
    0
    2 Константин • 08:09, 26.04.2012
    Блин! И стоило ради этого целый класс писать, когда можно было обойтись одной функцией преобразования? Для этих целей очень подойдут регулярные выражения!
    avatar
    Отчасти согласен, Ваш способ применим но есть одно но... слишком уж долгий метод smile
    avatar
    ЗЫ: пример содержания списка замен:

    "КС" = "X"; "кс" = "x"; "Кс" = "X"; "А" = "A"; "Б" = "B";
    "В" = "V"; "Г" = "G"; "Д" = "D"; "Е" = "YE"; "Ё" = "YO";
    "Ж" = "ZH"; "З" = "Z"; "И" = "I"; "Й" = "Y"; "К" = "K";
    "Л" = "L"; "М" = "M"; "Н" = "N"; "О" = "O"; "П" = "P"; "Р" = "R";
    "С" = "S"; "Т" = "T"; "У" = "U"; "Ф" = "F"; "Х" = "KH"; "Ц" = "TS";
    "Ч" = "CH"; "Ш" = "SH"; "Щ" = "SHCH"; "Ъ" = ""; "Ы" = "Y"; "Ь" = "'";
    "Э" = "E"; "Ю" = "YU"; "Я" = "YA"; "а" = "a"; "б" = "b"; "в" = "v";
    "г" = "g"; "д" = "d"; "е" = "ye"; "ё" = "yo"; "ж" = "zh"; "з" = "z";
    "и" = "i"; "й" = "y"; "к" = "k"; "л" = "l"; "м" = "m"; "н" = "n";
    "о" = "o"; "п" = "p"; "р" = "r"; "с" = "s"; "т" = "t"; "у" = "u";
    "ф" = "f"; "х" = "kh"; "ц" = "ts"; "ч" = "ch"; "ш" = "sh"; "щ" = "shch";
    "ъ" = ""; "ы" = "y"; "ь" = "'"; "э" = "e"; "ю" = "yu"; "я" = "ya";
    biggrin cool

    avatar
    Мои услуги на Kwork
    Like It


    Copyright Алексей Никипольский © 2009 - 2024