powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / анализ строки
25 сообщений из 41, страница 1 из 2
анализ строки
    #37258641
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi All

txt файл содержит данные... (разделитель ";") одно из полей л/с может иметь значения
2011700301
20117003
20117-003-01
20117-3-1
20117-003\01
20117-3\1
20117-003.01
20117-3.1
20117-003/01
20117-3/1

значение должно соответствовать ккккк-aaa-дд (5 знаков код книги, делее, 3 нака код абонента, 2 знака договор)
могут пресутствовать разделители "/","\","-","." , могу отсутствовать...
нужно привести к 1 колонка 5 знаков "20117", 2 колонка 3 знака "003", 3 колонка 2 знака "01" - значание может отсутствовать, тогда ставим "01".
Как это реализовать на VBA? или с помощью скрипта xls?
...
Рейтинг: 0 / 0
анализ строки
    #37258692
balbes,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
set f=CreateObject("scripting.filesystemobject").OpenTextFile (<путь к файлу>)
t=r.readline
do 
  t=replace( _
       replace ( _
           replace(t,"\","/"),"-", "/" ),".", "/")
  if instr( 1 ,t,"/") then
    a=split(t,"/")
    colon1=Right("00000" & a( 0 ),  5 )
    colon2=Right("000" & a( 1 ),  3 )
    if str(a( 2 ))="" Then colon3="01" else colon3=Right("00" & a( 3 ),  2 )
  else
    colon1=left(t, 5 )
    colon2=mid(t, 6 , 3 )
    colon3=mid(t, 9 )
    if colon3="" then colon3="01" else colon3=Right("00" & colon3,  2 )
  end if
  t=r.readline
loop untill f.atendofstream
f.close
set f=nothing

...
Рейтинг: 0 / 0
анализ строки
    #37258746
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi пробуй камнем
а как это заставить выполняться?
в xls ч.з alt+F11 в модуль добавил не работает, ругается на синтаксис... :(
...
Рейтинг: 0 / 0
анализ строки
    #37259743
balbes,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
' подправьте выделенное цветом
Set f = CreateObject("scripting.filesystemobject").OpenTextFile("полный путь к Вашему текстовому файлу")
t = f.readline
Do
  t = Replace( _
       Replace( _
           Replace(t, "\", "/"), "-", "/"), ".", "/")
  If InStr( 1 , t, "/") Then
    a = Split(t, "/")
    colon1 = Right("00000" & a( 0 ),  5 )
    colon2 = Right("000" & a( 1 ),  3 )
    If CStr(a( 2 )) = "" Then colon3 = "01" Else colon3 = Right("00" & a( 2 ),  2 )
  Else
    colon1 = Left(t,  5 )
    colon2 = Mid(t,  6 ,  3 )
    colon3 = Mid(t,  9 )
    If colon3 = "" Then colon3 = "01" Else colon3 = Right("00" & colon3,  2 )
  End If
  t = f.readline
Loop Until f.atendofstream
f.Close
Set f = Nothing
...
Рейтинг: 0 / 0
анализ строки
    #37259752
balbes,
пардон, ещё одно исправление забыл выделить
Код: plaintext
Loop Until f.atendofstream
...
Рейтинг: 0 / 0
анализ строки
    #37261879
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi пробуй камнем

прошу прощения пожалуйста, объясните мне где и как данный код выполнить?
CStr - переменная?

эти строки вообще не понимаю...
Код: plaintext
1.
Loop Until f.atendofstream
Set f = Nothing

сделал так alt+F11
модуль, макрос вставил туда код, исправил путь
получилось
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
' подправьте выделенное цветом
Set f = CreateObject("scripting.filesystemobject").OpenTextFile("D:/ASFL/6425221.txt")
t = f.readline
Do
  t = Replace( _
       Replace( _
           Replace(t, "\", "/"), "-", "/"), ".", "/")
  If InStr( 1 , t, "/") Then
    a = Split(t, "/")
    colon1 = Right("00000" & a( 0 ),  5 )
    colon2 = Right("000" & a( 1 ),  3 )
    If CStr(a( 2 )) = "" Then colon3 = "01" Else colon3 = Right("00" & a( 2 ),  2 )
  Else
    colon1 = Left(t,  5 )
    colon2 = Mid(t,  6 ,  3 )
    colon3 = Mid(t,  9 )
    If colon3 = "" Then colon3 = "01" Else colon3 = Right("00" & colon3,  2 )
  End If
  t = f.readline
Loop Until f.atendofstream
f.Close
Set f = Nothing
результат, ничего не происходит... ;(
...
Рейтинг: 0 / 0
анализ строки
    #37261883
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу часть файла выложить
данную сроку ;169:20143-31.1:ОДНОТАРИФНЫЙ:::::::::; нужно привести к формату 1 колонка 20143, 2 колонка 031, 3 колонка 01
буду благодарен за примеры и скрипты с коментариями, т.к. в VBA очень слаб... струдом понимаю логику тарнскрипциии...
...
Рейтинг: 0 / 0
анализ строки
    #37261918
balbes,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
' открываем текстовый файл
Set f = CreateObject("scripting.filesystemobject").OpenTextFile("D:/ASFL/6425221.txt")
' читаем строку из файла
t = f.readline
' цикл (условие выхода из цикла - ниже)
Do
' заменить в строке символы \ - . на /
  t = Replace( _
       Replace( _
           Replace(t, "\", "/"), "-", "/"), ".", "/")
  If InStr( 1 , t, "/") Then   ' если строка содержит символ /
' создать из строки массив (как именно - см.файл справки по функции Split)  
    a = Split(t, "/")
' обработка элементов массива
    colon1 = Right("00000" & a( 0 ),  5 )
    colon2 = Right("000" & a( 1 ),  3 )
    If CStr(a( 2 )) = "" Then colon3 = "01" Else colon3 = Right("00" & a( 2 ),  2 )
  Else ' наче (строка не содержит символ / )
' в переменную colon1 - первых пять символов строки
    colon1 = Left(t,  5 )
' в переменную colon2 - символы строки с 6-го по 8-й 
    colon2 = Mid(t,  6 ,  3 )
' в переменную colon3 - символы строки, начиная с 9-го
    colon3 = Mid(t,  9 )
' если в colon3 пустая строка, присвоить значение '01', иначе - отформатировать, чттобы содержала два знака
    If colon3 = "" Then colon3 = "01" Else colon3 = Right("00" & colon3,  2 )
  End If
' здесь вставляете свой код, в котором используете значения переменных colon1, colon2, colon3
' ...

' прочитать следующую строку из потока (файла)
  t = f.readline

' поворять пока не достигнут конец потока (файла)
Loop Until f.atendofstream

' закрыть файл
f.Close
' "освободить память"
Set f = Nothing
...
Рейтинг: 0 / 0
анализ строки
    #37263384
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант Зуб - Энд Зуб поставили???
...
Рейтинг: 0 / 0
анализ строки
    #37263846
balbesмогу часть файла выложить
данную сроку ;169:20143-31.1:ОДНОТАРИФНЫЙ:::::::::; нужно привести к формату ...вопрос1: что делать с остальными полями ?

в выложенном Вами файле, есть две записи, формат которых не соотвествует описанному в первом посте
Код: plaintext
1.
2.
;169: 312 :ОДНОТАРИФНЫЙ:::::::::; (строка 8)
;169: 55 :ОДНОТАРИФНЫЙ:::::::::; (строка 10)
вопрос2: каким образом поступать с такими записями ?
...
Рейтинг: 0 / 0
анализ строки
    #37263871
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi
Ципихович Эндрю простите Ваша алигория мне не совсем понятна....

hi
пробуй камнем
пробуй камнемвопрос1: что делать с остальными полями ? Вообще цель операции сделать из txt -> dbf для импорта в БД сторонних разработчиков, txt предоставлят СБ РФ (это оплаты)...
для полной ясности выкладываю "криво" работающий скрипт, буду благодарен за правку.
пробуй камнемв выложенном Вами файле, есть две записи, формат которых не соотвествует описанному в первом посте
;169:312:ОДНОТАРИФНЫЙ:::::::::; (строка 8);169:55:ОДНОТАРИФНЫЙ:::::::::; (строка 10)
вопрос2: каким образом поступать с такими записями ? Тут косяк оператора принявшего оплату, либо абонент тупо не помнит свой лицевой...
данные записи 312, 55 должны попадать в поле "старый лицевой счет" - "LS_OLD_NM".
...
Рейтинг: 0 / 0
анализ строки
    #37263899
balbes,
смогу вечером заняться. Терпит?
...
Рейтинг: 0 / 0
анализ строки
    #37263914
balbes,
выложите описание полей dbf-файла импорта. Какая версия dbf нужна ? Нужны ли эти данные в Excel или можно напрямую писать в dbf ?
...
Рейтинг: 0 / 0
анализ строки
    #37263926
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробуй камнем - конечно терпит, уже низкин поклон за то что возитесь со мной....
формат dbf описан во вложении...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  'Ñîçäàåì íîâûé ëèñò
  
  Set ws21 = Worksheets.Add
  ws21.Name = "dbf"
  'Îïðåäåëÿåì ðàçìåð êîëîíîê è ôîðìàò äàííûõ
  Worksheets.Item( 1 ).Columns("A:G").ColumnWidth =  14 
  Worksheets.Item( 1 ).Columns("J:N").ColumnWidth =  14 
  Worksheets.Item( 1 ).Columns("H:I").ColumnWidth =  50 
  Worksheets.Item( 1 ).Columns("K").ColumnWidth =  50 
  Worksheets.Item( 1 ).Columns("A:N").NumberFormat = "0"
  Worksheets.Item( 1 ).Columns("D:G").NumberFormat = "0.00"
  Worksheets.Item( 1 ).Columns("J").NumberFormat = "DD.MM.YYYY"
  Worksheets.Item( 1 ).Columns("M").NumberFormat = "DD.MM.YYYY"
  Worksheets.Item( 1 ).Columns("N").NumberFormat = "@"
  
  
  'Çàäàåì çàãîëîâêè
  Worksheets.Item( 1 ).Cells( 1 ,  1 ).Value = "KNIGA_KD"
  Worksheets.Item( 1 ).Cells( 1 ,  2 ).Value = "ABON_NN"
  Worksheets.Item( 1 ).Cells( 1 ,  3 ).Value = "DOG_NB"
  Worksheets.Item( 1 ).Cells( 1 ,  4 ).Value = "SC_VL"
  Worksheets.Item( 1 ).Cells( 1 ,  5 ).Value = "PRED_SC_VL"
  Worksheets.Item( 1 ).Cells( 1 ,  6 ).Value = "RASHOD"
  Worksheets.Item( 1 ).Cells( 1 ,  7 ).Value = "KVIT_SM"
  Worksheets.Item( 1 ).Cells( 1 ,  8 ).Value = "KVIT_FIO"
  Worksheets.Item( 1 ).Cells( 1 ,  9 ).Value = "ADDRESS"
  Worksheets.Item( 1 ).Cells( 1 ,  10 ).Value = "KVIT_DT"
  Worksheets.Item( 1 ).Cells( 1 ,  11 ).Value = "KVIT_PS"
  Worksheets.Item( 1 ).Cells( 1 ,  12 ).Value = "PLATEG_KD"
  Worksheets.Item( 1 ).Cells( 1 ,  13 ).Value = "PLAT_MY"
  Worksheets.Item( 1 ).Cells( 1 ,  14 ).Value = "LS_OLD_NM"
...
Рейтинг: 0 / 0
анализ строки
    #37265909
balbes,
пока только вопросы по вашей "спецификации"

в dbf-файле должно получиться 14 полей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 KNIGA_KD N( 14 , 0 )
 ABON_NN N( 14 , 0 )
 DOG_NB N( 14 , 0 )
 SC_VL N( 14 , 2 )
 PRED_SC_VL N( 14 , 2 )
 RASHOD N( 14 , 2 )
 KVIT_SM N( 14 , 2 )
 KVIT_FIO N( 50 , 0 )
 ADDRESS N( 50 , 0 )
 KVIT_DT D( 14 )
 KVIT_PS N( 50 , 0 )
 PLATEG_KD N( 14 , 0 )
 PLAT_MY D( 14 )
 LS_OLD_NM С( 14 )
-- где 
-- N(x,y) - числовое поле, x- длина, y- точность
-- С(x) - текстовое поле, x- длина
-- D(x) - поле с датой, x- длина(?)
если форматы полей указаны не правильно, поправьте.

Текстовый файл (запятые заменил на тильды, не пугайтесь)поле1поле2поле3поле4поле5поле6поле7поле8поле9поле10поле11МАТАЕВ С ВЗАРЕЧНЫЙ~ ~ ~ 425.70169:20143-31.1:ОДНОТАРИФНЫЙ:::::::::11/05/2011-425.70504492985ОВЧИННИКОВА ИРИНА ВЛАДИМИРОВНАГАВАЙ~ ОКТЯБРЬСКИЙ~ 4~ 2387.00169:20117-004-01:ОДНОТАРИФНЫЙ:::::::::11/05/2011-812.70504493005ФАТТАКОВ ИЛЬНУР ПАВИЛОВИЧТОМСК~ М-ЗОРКАЛЬЦЕВА СОВЕТСКАЯ~ 42~ 296.96169:20427-008-01:ОДНОТАРИФНЫЙ:::::::::11/05/2011-1109.66504516019ШАРАПОВ Н ПЗАРЕЧНЫЙ~ ~ ~ 363.78169:20143-5.1:ОДНОТАРИФНЫЙ:::::::::11/05/2011-1473.44504621961ГРЕБНЕВ АЛЕКСАНДР АЛЕКСЕЕВИЧТОМСК~ М-ЗОРКАЛЬЦЕВА СОВЕТСКАЯ~ 58~ 404.48169:20427-136-01:ОДНОТАРИФНЫЙ:::::::::11/05/2011-1877.92504689494ФЕДЕНКО НИКОЛАЙ ТЕРЕНТЬЕВИЧТОМСК~ МЕНДЕЛЕЕВО~ 4~ 45132.48169:20495-158-01:ОДНОТАРИФНЫЙ:::::::::11/05/2011-46551.18505417250ЧЕРКАШИНА ВАЛЕНТИНА ИВАНОВНАТОМСК~ МЕНДЕЛЕЕВО~ 20~ 38164.00169:20495-4631:ОДНОТАРИФНЫЙ:::::::::11/05/2011-46715.18505419837АГОШКОВА СВЕТЛАНА ВЛАДИМИРОВНАТОМСК~ МЕНДЕЛЕЕВО~ 5~ 32402.60169:312:ОДНОТАРИФНЫЙ:::::::::11/05/2011-47117.78505420594ИВАНЕНКО ЛИДИЯ АЛЕКСЕЕВНАТОМСК~ МЕНДЕЛЕЕВО~ 21~ 3160.00169:20495-521-01:ОДНОТАРИФНЫЙ:::::::::11/05/2011-47277.78505424836ЗАХВАТОВА НАТАЛЬЯ КОНСТАНТИНОВНАТОМСК~ ВИНОКУРОВА/ЦЕНТРАЛЬНАЯ~ 9~ 516.00169:55:ОДНОТАРИФНЫЙ:::::::::11/05/2011-47793.78505429530


Опишите своими словами алгоритм преобразования txt -> dbf. Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
поле1 -> KVIT_FIO
поле2 -> ADDRESS
поле3 -> ???
поле4 в формате '0.00' -> ???
поле5 -> ???
поле6 всегда пустое, не обрабатывать
поле7 всегда пустое, не обрабатывать
поле8 разделитель ':' 
     8 . 1 . -> ??? 
     8 . 2 . разделители '/\-.' 
        если длина менне N символов и отсутствуют разделители, то -> ??? 
        иначе  8 . 2 . 1  (до разделителя или первые  5  знаков) -> ??? 
               8 . 2 . 2  (до разделителя или знаки с  6 -го по  8 -й) в формате '000' -> ??? 
               8 . 2 . 3  (может отсутствовать, значение по-умолчанию '01') в формате '00' -> ???
     8 . 3 . -> ???
     8 . 4 . -> ???
    ...
поле9 в формате 'dd.mm.yyyy' -> ???
...
...
Рейтинг: 0 / 0
анализ строки
    #37266144
balbes,
Добавил в книгу второй лист - шаблон для будущего dbf.
Убрал код форматирования листа-шаблона в отдельную процедуру (при формировании dbf файла не используется).
На тестовых данных работает.
...
Рейтинг: 0 / 0
анализ строки
    #37266250
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi
пробуй камнем
спасибо огромное, результат устраивает!
буду изучать код... чтоб разобраться как все выполняется.
с меня ПИВО!...
...
Рейтинг: 0 / 0
анализ строки
    #37266291
balbes,
есть баг. Присмотритесь к полям ФИО и АДРЕС в dbf. Надеюсь, сами исправите.
...
Рейтинг: 0 / 0
анализ строки
    #37268559
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi пробуй камнем
пробуй камнеместь баг. Присмотритесь к полям ФИО и АДРЕС в dbf. Надеюсь, сами исправите.
Код: plaintext
1.
            .Cells(k,  8 ) = a( 0 ) '1
            .Cells(k,  9 ) = a( 1 ) ' 0 
УЖЕ!
ЕЩЕ РАЗ СПАСИБО!...
...
Рейтинг: 0 / 0
анализ строки
    #37270636
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi пробуй камнем
при импорте возникает ошибка....
т.е. если юзаю старый конветр который я выкладывал, то его файлы подтягиваются...
а Ваш... возникает ошибка... Подозреваю что либо формат полей его не устраивает либо тип dbf, хотя визуально не могу найти разницы , как быть не знаю...
...
Рейтинг: 0 / 0
анализ строки
    #37270696
balbes,
элементарно, Ватсон(с)
выложить здесь "хороший" и "плохой" dbf - сообщество наверняка подскажет.

Я делаю ставку на поля с типом "дата".
...
Рейтинг: 0 / 0
анализ строки
    #37270698
ЗЫ: ещё неплохо было бы текст ошибки опубликовать. Вдруг поможет.
...
Рейтинг: 0 / 0
анализ строки
    #37270786
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi ALL
помогите найти причину....

файло рабочее
6559286_.dbf сделано старым конвертаром. Конв_сбер_txt_dbf.xls
файло не рабочее
_6559286.dbf сделано новым конвертором Конв_сбер_txt_dbf_copy.xls
все в архиве arhiv.rar
...
Рейтинг: 0 / 0
анализ строки
    #37270874
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробуй камнемЗЫ: ещё неплохо было бы текст ошибки опубликовать. Вдруг поможет.
ошибка :
Невозможно импортировать файл реестра
данные не синхронизированы...
Обратитесь к администратору системы
...
Рейтинг: 0 / 0
анализ строки
    #37272265
balbes,
ошибка из-за разных алгоритмов обработки второго элемента поля KVIT_PS. Два бага в моем обработчике нашел: balbesзначение должно соответствовать ккккк-aaa-дд(5 знаков код книги, делее, 3 нака код абонента, 2 знака договор)При наличии разделителя/разделителей в строке у меня не проверяются условия:
количество элементов равно трем (или можно от 2-х включительно до 3-х включительно ?)

Len(код_книг)=5 (или можно <=5 ?), Len(код_абонента)<=3, Len(договор)<=2

ЗЫ: Осталась непонятной логика "старого" конвертера:
строка 5: 20189-14-02 отфильтрована, строка 12: 20198-62-01 отфильтрована, строка 62: 20197-06-01 отфильтрована,
хотя похожая
строка 28: 20312-27/1 валидна

строка 14: 20198-065 отфильтрована, строка 23: 20189-20 отфильтрована

строка 63: 20495-110/1 отфильтрована

...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / анализ строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]