Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Отредактировать текстовый файл (http://forum.oszone.net/showthread.php?t=275838)

login 15-01-2014 17:05 2289741

Отредактировать текстовый файл
 
Помогите пожалуйста отредактировать автоматически текстовик.
Исходный вид:

992
11301994
04
0000
130
Плата за выбросы
992
11301994
04
0000
130
Плата за выбросы
992
11301994
04
0000
130
Плата за выбросы

Конечный вид:

DKST||||20|99211301994040000130||Плата за выбросы||01.01.2014||1|01.01.2014 09:09:09|
DKST||||20|99211301994040000130||Плата за выбросы||01.01.2014||1|01.01.2014 09:09:09|
DKST||||20|99211301994040000130||Плата за выбросы||01.01.2014||1|01.01.2014 09:09:09|

Заранее спасибо

Iska 15-01-2014 18:07 2289782

По каким принципам?

madmasles 15-01-2014 20:12 2289860

login,
Попробуйте примерно так.
Код:

Local $sFile = @ScriptDir & '\text.txt', $sTxt, $aTxt, $iUb, $sBeginStr = 'DKST||||20|', $sMiddleStr = '1', _
        $sDate = '01.01.2014', $sTime = '09:09:09', $iMaxStrLen = 254

$aTxt = StringRegExp(FileRead($sFile), '([\d\r\n]+)(?<=[\r\n])([ЁёА-Яа-я].+?)(?=[\r\n]|$)', 3)
$iUb = UBound($aTxt)
If (Not $iUb) Or (Mod($iUb, 2)) Then Exit 13
For $i = 0 To $iUb - 1 Step 2
    $sTxt &= StringFormat('%s%s||%s|%s|%s||%s|%s %s|\r\n', $sBeginStr, StringRegExpReplace($aTxt[$i], '[^\d]', ''), _
            StringLeft($aTxt[$i + 1], $iMaxStrLen), $aTxt[$i + 1], $sDate, $sMiddleStr, $sDate, $sTime)
Next
$sTxt = StringTrimRight($sTxt, 2)
ConsoleWrite($sTxt & @LF)

text.txt:
Код:

992
11301994
04
0000
130
Плата за выбросы
992
11301994
04
0000
130
Субвенции бюджетам городских округов на выполнение передаваемых полномочий субъектов Российской Федерации по выплате социального пособия на погребение, установленного статьей 10 Федерального закона от 12 января 1996 года № 8-ФЗ "О погребении и похоронном деле"
992
11301994
04
0000
130
Прочие субсидии бюджетам городских округов на реализацию подпрограммы "Модернизация автотранспортного комплекса Пензенской области (2011-2013 годы)" долгосрочной целевой программы "Повышение безопасности дорожного движения, развитие территориальной сети автомобильных дорог и транспортного комплекса Пензенской области на 2011-2014 годы" (кредиторская задолженность)


login 16-01-2014 08:11 2290050

Цитата:

Цитата madmasles
([ЁёА-Яа-я\h]+) »

А если в тексте встречаются спец символы, как быть? (кавычки, запятые,тире и тп)

madmasles 16-01-2014 08:45 2290054

Цитата:

Цитата login
А если в тексте встречаются спец символы »

Вы пример дали, я с ним и работал.

login 16-01-2014 08:59 2290062

Огромное вам спасибо за проделанную работу!
Но подскажите уж, пожалуйста, как сделать, чтобы обрабатывались все символы.

madmasles 16-01-2014 09:02 2290064

login,
Дайте пример всех возможных строк - не чисел.

login 16-01-2014 09:05 2290066

Субвенции бюджетам городских округов на выполнение передаваемых полномочий субъектов Российской Федерации по выплате социального пособия на погребение, установленного статьей 10 Федерального закона от 12 января 1996 года № 8-ФЗ "О погребении и похоронном деле"

Прочие субсидии бюджетам городских округов на реализацию подпрограммы "Модернизация автотранспортного комплекса Пензенской области (2011-2013 годы)" долгосрочной целевой программы "Повышение безопасности дорожного движения, развитие территориальной сети автомобильных дорог и транспортного комплекса Пензенской области на 2011-2014 годы" (кредиторская задолженность)

madmasles 16-01-2014 09:14 2290069

login,
Я поменял код в своем первом сообщении.

На будущее - даете пример текста(файла) для обработки, включайте в него все возможные комбинации символов.

login 16-01-2014 10:31 2290102

Спасибо. Все получилось.

login 16-01-2014 11:51 2290133

А помогите, пожалуйста, еще доделать один момент:

В конечном виде в позицию помеченную _X_X_:

DKST||||20|99211301994040000130|_X_X_|Текстовое поле||01.01.2014||1|01.01.2014 09:09:09|

Нужно вставить тоже самое Текстовое поле, но с условием обрезки его до длинны 254 символа, если длинна Текстового поля превышает 255, и не обрезать, если длинна менее 255.

Например: "Прочие субсидии бюджетам городских округов на реализацию подпрограммы "Модернизация автотранспортного комплекса Пензенской области (2011-2013 годы)" долгосрочной целевой программы "Повышение безопасности дорожного движения, развитие территориальной сети автомобильных дорог и транспортного комплекса Пензенской области на 2011-2014 годы" (кредиторская задолженность)"

- 367 символов, нужно обрезать до 254:

"Прочие субсидии бюджетам городских округов на реализацию подпрограммы "Модернизация автотранспортного комплекса Пензенской области (2011-2013 годы)" долгосрочной целевой программы "Повышение безопасности дорожного движения, развитие территориальной сети"

и вставить в поле _X_X_

ИТОГ:

DKST||||20|99211301994040000130|Прочие субсидии бюджетам городских округов на реализацию подпрограммы "Модернизация автотранспортного комплекса Пензенской области (2011-2013 годы)" долгосрочной целевой программы "Повышение безопасности дорожного движения, развитие территориальной сети|Прочие субсидии бюджетам городских округов на реализацию подпрограммы "Модернизация автотранспортного комплекса Пензенской области (2011-2013 годы)" долгосрочной целевой программы "Повышение безопасности дорожного движения, развитие территориальной сети автомобильных дорог и транспортного комплекса Пензенской области на 2011-2014 годы" (кредиторская задолженность||01.01.2014||1|01.01.2014 09:09:09|

Iska 16-01-2014 12:53 2290159

Цитата:

Цитата login
если длинна Текстового поля превышает 255, »

Может быть, всё-таки — «превышает 254»?

madmasles 16-01-2014 12:55 2290162

Цитата:

Цитата login
но с условием обрезки его до длинны 254 символа, если длинна Текстового поля превышает 255, и не обрезать, если длинна менее 255. »

А если ровно 255? :)

Я поменял код в своем первом ответе.


Время: 09:40.

Время: 09:40.
© OSzone.net 2001-