Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обработать текст?

1.2K
21 декабря 2005 года
richel
142 / / 20.01.2005
Кусок текста представлен в таблице Ворд и прикреплен к вопросу.
Я с ним замучалась, потому что не вижу, за что могу зацепиться.
Мне нужно разбить этот текст на куски, начиная со строки "ТЛИШ..." (не обязательно ТЛИШ, обозначение может начинаться на другие буквы) и до первой пустой строки. Фразы, типа "Узлы крепления", Узлы заземления" должны пропускаться.
Каждый такой кусок (отдельно) нужно преобразовать в txt-файл в двух вариантах:
для варианта куска "ТЛИШ.... до Шайба 6.65..." текст формируется такой
 
Код:
#|ТЛИШ363613.045-11|
1|1||Болт М6-6еХ30.58  Ц09.Хр  ГОСТ7798-80|796|1|
2|2||Гайка М6-6G.5    Ц06.Хр  ГОСТ 5915-70|796|1|
3|3||Гайка М6-6G.5    Ц06.Хр  ГОСТ 5916-70|796|1|
4|4||Шайба 6.65Г Ц18Хр ГОСТ511371-78|796|1|
#

Для варианта куска "ТЛИШ... заземление светильника..." такой:
 
Код:
#| ТЛИШ.363621.006-00 заземление светильника на трубу |999422000001|796|1|

Вопрос 1: как задать условие, чтобы тестировать кусок от "ТЛИШ.." до пустой строки после оперативных данных? В этом же цикле обработать данные, чтобы они построчно встали в текстовый файл?
Вопрос 2: Как перейти к следующему куску?
Вопрос 3: Как в ситуации с "ТЛИШ... заземление светильника..." произвести "склеивание" строк. А я уж потом вычленю из фразы кусочки и расставлю их в нужном порядке.
Что делаю я: определяю значения в столбцах для i-й строки и для i+1. В цикле перехожу по строкам вниз i++. Смотрю признаки различия, причем участвуют строка i и i+1. И вот в этих различиях идет путаница. Например, "Состав узлов" а после этого заголовка идет пустая строка и "заземление светильника на трубу" попадают под один признак различия. "ТЛИШ..." и следом "Болт..." и другой пример "Узлы заземления" следом "ТЛИШ..." также попадают под один признак. Следовательно, правильного условия не получается.
Вот мое начало:
Код:
for (int i=1; i <= row; i++) {    //Start rowlst->Strings[0]
   int r1 = i+1;

   Variant usel2 = Tables3.OleFunction("Cell", i, 2).OlePropertyGet("Range").OlePropertyGet("Text");
   Variant usel3 = Tables3.OleFunction("Cell", i, 3).OlePropertyGet("Range").OlePropertyGet("Text");
   Variant usel4 = Tables3.OleFunction("Cell", i, 4).OlePropertyGet("Range").OlePropertyGet("Text");
   int flag_usel2 = Trim(AnsiString(usel2)).Length();
   int flag_usel3 = Trim(AnsiString(usel3)).Length();
   int flag_usel4 = Trim(AnsiString(usel4)).Length();

//Наименование узла- столбец 2
AnsiString us2_s = Trim(AnsiString(usel2));  //Соединение в одну строку
strreplace(us2_s.c_str(), '\r', '\t');    //Замена конца строки на пробел
String naim_us = cutSpaces(us2_s);    //Удаление пробелов, если их больше двух
//ShowMessage(naim_us);
//Код. ед. узла - столбец 3
AnsiString us3_s = Trim(AnsiString(usel3));  //Соединение в одну строку
strreplace(us3_s.c_str(), '\r', '\t');    //Замена конца строки на пробел
String kod_us = cutSpaces(us3_s);    //Удаление пробелов, если их больше двух
//Кол-во узлов - столбец 4
AnsiString us4_s = Trim(AnsiString(usel4));  //Соединение в одну строку
strreplace(us4_s.c_str(), '\r', '\t');    //Замена конца строки на пробел
String kol_us = cutSpaces(us4_s);    //Удаление пробелов, если их больше двух

 String Next_naim_us[3];

   Variant r1_us2 = Tables3.OleFunction("Cell", r1, 2).OlePropertyGet("Range").OlePropertyGet("Text");
   Variant r1_us3 = Tables3.OleFunction("Cell", r1, 3).OlePropertyGet("Range").OlePropertyGet("Text");
   Variant r1_us4 = Tables3.OleFunction("Cell", r1, 4).OlePropertyGet("Range").OlePropertyGet("Text");

   int flag_r2 = Trim(AnsiString(r1_us2)).Length();
   int flag_r3 = Trim(AnsiString(r1_us3)).Length();
   int flag_r4 = Trim(AnsiString(r1_us4)).Length();

   int  emptyStr = 0;
   if (flag_r2 == 0 && flag_r3==0 && flag_r4==0)  //Пустая строка
      {
      emptyStr = 1;      //Пустая r-ая строка
      }

   //2 столбец
AnsiString r1_us2_s = Trim(AnsiString(r1_us2));  //Соединение в одну строку
strreplace(r1_us2_s.c_str(), '\r', '\t');    //Замена конца строки на пробел
Next_naim_us[0] = cutSpaces(r1_us2_s);    //Удаление пробелов, если их больше двух
   //3 столбец
AnsiString r1_us3_s = Trim(AnsiString(r1_us3));  //Соединение в одну строку
strreplace(r1_us3_s.c_str(), '\r', '\t');    //Замена конца строки на пробел
Next_naim_us[1] = cutSpaces(r1_us3_s);    //Удаление пробелов, если их больше двух
   //4 столбец
AnsiString r1_us4_s = Trim(AnsiString(r1_us4));  //Соединение в одну строку
strreplace(r1_us4_s.c_str(), '\r', '\t');    //Замена конца строки на пробел
Next_naim_us[2] = cutSpaces(r1_us4_s);    //Удаление пробелов, если их больше двух

        if  ((flag_usel2 > 0) &&
          (flag_usel3 == 0) && (flag_usel4 == 0) && (emptyStr == 1))
         {
            ShowMessage("Заголовок 1:  "  + naim_us);
          }

          else if ((flag_usel2 == 0) &&
          (flag_usel3 == 0) && (flag_usel4 == 0)&& (Next_naim_us[0] != 0)
          && (Next_naim_us[1] == 0)
          && (Next_naim_us[2] == 0))  {
          ShowMessage("Пустая строка:  "  +  naim_us);
          }

          else if ((flag_usel2 > 0) &&
          (flag_usel3 == 0) && (flag_usel4 == 0) && (Next_naim_us[0] != 0)
          && (Next_naim_us[1] == 0)
          && (Next_naim_us[2] == 0))  {
          ShowMessage("Узлы крепления:  "  +  naim_us);

          }

         else  if ((flag_usel2 > 0) &&
          (flag_usel3 == 0) && (flag_usel4 == 0) && (Next_naim_us[0] != "")
    &&(Next_naim_us[1]!= "")
    &&(Next_naim_us[2] != "")){
      ShowMessage("ТЛИШ:  " +  naim_us);
         }
          else  if( (flag_usel2 > 0) &&
          (flag_usel3 > 0) && (flag_usel4 > 0) && (Next_naim_us[0] != "")
    &&(Next_naim_us[1] != "")
    &&(Next_naim_us[2] != "")) {
      ShowMessage("Опер данные:   " +  naim_us);
         }
         else {  //Пропускаем
         }

}  //End rowlst->Strings[0]

Буду признательна, если поможите разобраться!:)
335
21 декабря 2005 года
enola
379 / / 25.01.2005
тихий ужас, а что нельзя было проще сказать: "Люди сделайте за меня мою работу!"
это же форум, а не кружок "очумелые ручки".
без обид, просто Ваш вопрос даже читать не хочется, Вы сами то на него смотрели?!!!
1.2K
21 декабря 2005 года
richel
142 / / 20.01.2005
Цитата:

тихий ужас, а что нельзя было проще сказать: "Люди сделайте за меня мою работу!"


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

 
Код:
#| ТЛИШ.363621.006-00 заземление светильника на трубу |999422000001|796|1|

Вторую половину пока не могу осилить, так как не за что зацепиться. Мне всего лишь нужно понять, как задать условие, чтобы обрабатывались куски типа "ТЛИШ... до Шайба 6.65...", а остальное игнорировалось. Поскольку между заголовком "Узлы крепления" и обозначением "ТЛИШ..." нет пустой строки, они оба у меня попадают под один критерий. И я не знаю, что с этим делать.
4.8K
21 декабря 2005 года
Jump
128 / / 09.11.2005
Сейчас времени много нет. В общем определись с тем, как ты различаешь участки таблицы сама (глазами) и попытайся запрограммировать эти критерии (Вплодь до высоты ячеек, способа выравнивания в них, размера шрифта и т.д.).
1.2K
21 декабря 2005 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by Jump
Сейчас времени много нет. В общем определись с тем, как ты различаешь участки таблицы сама (глазами) и попытайся запрограммировать эти критерии (Вплодь до высоты ячеек, способа выравнивания в них, размера шрифта и т.д.).


О таком направлении я не подумала. Спасибо! Хотя, мне кажется, я уже у цели.
А вопрос, действительно, задала объемно. Слишком поначалу растерялась, не знала, как сформулировать задачу. Уж не судите строго...P(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог