![]() |
Сложная замена текста в файле
Вложений: 1
имеется файл archive_dbf.xml в нем в одну строку записаны данные, нужно найти FRM_REFL="тут 16 чисел указанных через ;" и заменить на R_400="превое число" R_420="второе число" ...... R_700="шестнадцатое число" шаг между R +20, причем после этого поиск продолжится пока снова не встретится FRM_REFL с уже новыми значениями которые тоже нужно заменить и так до конца файла.
P/S/ По сути скрипт должен менять структуру xml и делать из одного параметра FRM_REFL 16 параметров от R_400 до R_700 при этом значения для R_ХХХ берутся из FRM_REFL В идеале ещё нужно найти <FIELD attrname="FRM_REFL" fieldtype="string.uni" WIDTH="256"/> и заменить <FIELD attrname="R_400" fieldtype="string.uni" WIDTH="256"/><FIELD attrname="R_420" fieldtype="string.uni" WIDTH="256"/> ..... <FIELD attrname="R_700" fieldtype="string.uni" WIDTH="256"/> Файл прикладываю. |
PowerShell:
Скрытый текст
Код:
$sSourceFile = "C:\Песочница\058\archive_dbf.xml" Цитата:
|
Цитата:
Скрытый текст
<FIELD attrname="FRM_REFL" fieldtype="string.uni" WIDTH="256"/> а потом строки например
<ROWDATA><ROW ID=" 184" DATAID="1227253747" PROD_ID=" 1" SUBP_ID=" 1" UNIT="1" FRACTION="1" WEIGHTMODE="FALSE" KEY1="M1019" KEY2="Mekran" KEY3="Ral 1019" BASE_ID=" 1" FILL_QC="0" FILL_WC="0" CAN_ID=" 0" CAN_WEIGHT="FALSE" NOM_Q0="300" FORMULA="1,39.35,2,2.4,4,15.8,6,4.5,10,0.15" PART="0" SUBSTR_ID=" 0" FRM_REFL="14.675;16.731;18.792;20.047;20.389;21.760;24.031;26.392;28.912;31.025;31.398;30.927;30.581 ;30.288;30.246;30.348;" X_02="26.79" Y_02="27.64" Z_02="21.26" X_10="26.57" Y_10="27.12" Z_10="20.74" DATA1="20120521" BAS_WEIGHT="FALSE" BASFILLQ="0" BASFILLW="0" BASSPEC_W="0" CUSCAN_DES="300 ml. - Обычный размер"/> Так вот если столбцов R_400 ... R_700 не будет создано, то вероятно что и строчки в которых станет на 16 значений больше могут сбится при дальнейшей работе с файлом. |
niverprof, в xml нет таких понятий как «параметр», «столбец» и т.п. Есть понятия «корень», «узел», «атрибут», «значение атрибута».
Перевести на русский выражение «Вначале xml создает» не смог вовсе. Сожалею. |
Цитата:
Элемент <ROW> описывает, как создавать строки данных из файла данных, который импортируется в таблицу. в каждом элементе <ROW> мы заменяем один атрибут FRM_REFL= на шестнадцать атрибутов R_XXX, значения которых берем из FRM_REFL= путем разделения по признаку ; Надеюсь так стало понятнее. За скрипт огромное спасибо поставил PowerShell разобрался как работает, скрипт отработал на ура все поделилось так как хотел! осталось только создать <FIELD attrname="R_XXX"> |
niverprof, это уже сделано в скрипте выше на PowerShell.
Непонятна вторая часть, со слов: Цитата:
|
Цитата:
а вот <FIELD> остался без изменений, нужно удалить <FIELD attrname="FRM_REFL" fieldtype="string.uni" WIDTH="256" /> и создать <FIELD attrname="R_$i" fieldtype="string.uni" WIDTH="256" /> где $i = 400 с шагом 20 и концом 700. |
niverprof, ага, начинаю теперь понимать связь, на свежую голову… Попробую изобразить.
|
niverprof, ну, вот, если ничего не забыл — как-то так:
Скрытый текст
Код:
$sSourceFile = "E:\Песочница\0417\archive_dbf.xml" Пробуйте. Проверок соответствия формата никаких. |
Цитата:
Все работает только с русским текстом беда. В исходном файле например в атрибуте "CUSCAN_DES" надпись на русским выглядит как CUSCAN_DES="500 ml. - & #1054;& #1073;& #1099;& #1095;& #1085;& #1099;& #1081; & #1088;& #1072;& #1079;& #1084;& #1077;& #1088;" а после обработки CUSCAN_DES="500 ml. - Обычный размер" и при дальнейшем импорте в базу из за кодировки вместо русских букв вопросики ??????? как сделать чтобы обработка выкладывала то что взяла без изменений, или проще кодировку поменять в XML? |
Цитата:
А беда — вот это: Цитата:
К сожалению, навскидку не нашёл ничего подходящего для решения такой проблемы. |
Цитата:
|
Время: 17:44. |
Время: 17:44.
© OSzone.net 2001-