Как обработать текст?
Я с ним замучалась, потому что не вижу, за что могу зацепиться.
Мне нужно разбить этот текст на куски, начиная со строки "ТЛИШ..." (не обязательно ТЛИШ, обозначение может начинаться на другие буквы) и до первой пустой строки. Фразы, типа "Узлы крепления", Узлы заземления" должны пропускаться.
Каждый такой кусок (отдельно) нужно преобразовать в 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|
#
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]
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]
Буду признательна, если поможите разобраться!:)
это же форум, а не кружок "очумелые ручки".
без обид, просто Ваш вопрос даже читать не хочется, Вы сами то на него смотрели?!!!
Цитата:
тихий ужас, а что нельзя было проще сказать: "Люди сделайте за меня мою работу!"
Наверное я этого не жду, поскольку целый день сижу с этой проблемой и сделала ползадачи, а именно
Код:
#| ТЛИШ.363621.006-00 заземление светильника на трубу |999422000001|796|1|
Вторую половину пока не могу осилить, так как не за что зацепиться. Мне всего лишь нужно понять, как задать условие, чтобы обрабатывались куски типа "ТЛИШ... до Шайба 6.65...", а остальное игнорировалось. Поскольку между заголовком "Узлы крепления" и обозначением "ТЛИШ..." нет пустой строки, они оба у меня попадают под один критерий. И я не знаю, что с этим делать.
Сейчас времени много нет. В общем определись с тем, как ты различаешь участки таблицы сама (глазами) и попытайся запрограммировать эти критерии (Вплодь до высоты ячеек, способа выравнивания в них, размера шрифта и т.д.).
Цитата:
Originally posted by Jump
Сейчас времени много нет. В общем определись с тем, как ты различаешь участки таблицы сама (глазами) и попытайся запрограммировать эти критерии (Вплодь до высоты ячеек, способа выравнивания в них, размера шрифта и т.д.).
Сейчас времени много нет. В общем определись с тем, как ты различаешь участки таблицы сама (глазами) и попытайся запрограммировать эти критерии (Вплодь до высоты ячеек, способа выравнивания в них, размера шрифта и т.д.).
О таком направлении я не подумала. Спасибо! Хотя, мне кажется, я уже у цели.
А вопрос, действительно, задала объемно. Слишком поначалу растерялась, не знала, как сформулировать задачу. Уж не судите строго...P(