powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / анализ строки
41 сообщений из 41, показаны все 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
анализ строки
    #37272268
... третий баг:
при отсутствия разделителя в строке не проверяется условие Len(код_книги+абонент+договор)<=10
...
Рейтинг: 0 / 0
анализ строки
    #37272295
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пробуй камнемпри отсутствия разделителя в строке не проверяется условие Len(код_книги+абонент+договор)<=10
Может, код_книги & абонент & договор ?
...
Рейтинг: 0 / 0
анализ строки
    #37272313
AndreTM,
без разницы(с)
Т.к. НЕ проверяется.
...
Рейтинг: 0 / 0
анализ строки
    #37273787
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi
пробуй камнем

Проблема разрешилась... Дело было в том что ПО анализирует кол-во знаков в полях "KNIGA_KD","ABON_NN","DOG_NB" при загрузке
если "KNIGA_KD" <> 5 знакам или должно быть "-1" то возникает ошибка...
руками поправил поле "KNIGA_KD" что бы соответствовало 5 знакам... файло подтянулось...

Думаю что нужно реализовать доп проверки, как вы и описывали на. кол-во знаков введенных в данное поле... и т.п. но боюсь тут все не предусмотреть, т.к. операторы СБ РФ уже новые варианты ввода лицевых практикуют. Буду с банком созваниваться что бы единообразить ввод лицевых...

Если есть идеи по проверке введенных в строку значений буду благодарен...
...
Рейтинг: 0 / 0
анализ строки
    #37273952
balbes... операторы СБ РФ уже новые варианты ввода лицевых практикуют.
...
Если есть идеи по проверке введенных в строку значений ...Для каждого варианта ввода - свою обработку. Геморр ещё тот. Но альтернатива balbesБуду с банком созваниваться что бы единообразить ввод лицевых... имхо, ещё менее радостная
...
Рейтинг: 0 / 0
анализ строки
    #37304202
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi ALL & пробуй камнем
из одного txt файла нужно сделать 3 dbf (Участки )
в зовисимости от значения книги поле № 2 в txt фйле. нужно данные запихнуть в один из 3 dbf
1 участок книги от 100-216
2 участок книги от 257-514
3 участок остальныен книги
в архиве txt файл и конвертр txt->dbf
помогите люди добрые...
да и злые тоже...
...
Рейтинг: 0 / 0
анализ строки
    #37304650
balbesв зовисимости от значения книги поле № 2 в txt фйле

Код: plaintext
1.
2.
3.
 6700038 : 20427 : 148 : 01 : 08 . 06 . 2011 :: 11 : 0 : 0 :М-ЗОРКАЛЬЦЕВА,...
^        ^     ^
поле0  поле1  поле2
...
Рейтинг: 0 / 0
анализ строки
    #37305121
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi пробуй камнем
спасибо огромное, неожидал так быстро...
разбираюсь с кодом...
...
Рейтинг: 0 / 0
анализ строки
    #37479941
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi пробуй камнем

не могу разобраться самостоятельно плз. подскажи....

Код: plaintext
1.
2.
3.
4.
5.
6.
' инициализация массива "имен dbf-файлов с диапазонами номеров книг"
ad = Array( _
     Array("1-й участок",  20100 ,  20216 ), _
     Array("2-й участок",  20257 ,  20514 ), _
     "3-й участок")
' инициализация массива счетчиков строк
arrRow = Array( 2 ,  2 ,  2 )
требуется разбивать на 4 реестра (файла)

Попробовал так... (получается ерунда, либо 3-й участок, либо "Юрики" реестр не формируется...)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
' инициализация массива "имен dbf-файлов с диапазонами номеров книг"
ad = Array( _
     Array("1-й участок",  20100 ,  20216 ), _
     Array("2-й участок",  20257 ,  20514 ), _
     Array("Юрики",  20777 ,  20777 ), _
     "3-й участок")
' инициализация массива счетчиков строк
arrRow = Array( 2 ,  2 ,  2 )
И как можно добавить значения в 1 и 2 реестры участков если их номера выпадают из диапазонов 20100-20216 и 20257-20514 ?
Например 20640 - 1 участок, и 20156 - 2участок?

Конвертер немного модифицировал, поэтому выкладываю последний вариант. + файл реестра
...
Рейтинг: 0 / 0
анализ строки
    #37480034
balbes,
всё относится к процедуре Sub texthandling().
И как можно добавить значения в 1 и 2 реестры участков если их номера выпадают из диапазонов 20100-20216 и 20257-20514 ?
Например 20640 - 1 участок, и 20156 - 2участок?

Код: plaintext
1.
2.
'Добавляем одну переменную
Dim ii%
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
' инициализация массива "имен dbf-файлов с диапазонами номеров книг"
' (!) для каждого, кроме последнего, участка указываем диапазоны номеров
' (!) диапазоны не должны пересекаться, иначе получим неправильное распределение
' REM ИМХО: если количество участков/кол-во диапазонов будет расти, данный код будет сложно поддерживать
ad = Array( _
     Array("1-й участок",  20100 ,  20155 ,  20157 ,  20216 ,  20640 ,  20640 ), _
     Array("2-й участок",  20156 ,  20156 ,  20257 ,  20514 ), _
     Array("Юрики",  20777 ,  20777 ), _
     "3-й участок")
' инициализация массива счетчиков строк
' (!) количестко элементов должно соответствовать кол-ву елементов массива ad()
arrRow = Array( 2 ,  2 ,  2 ,  2 ) 
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            ' на какой участок распределить книгу
            For i =  0  To Ub -  1 
            For ii =  1  To UBound(ad(i)) Step  2 
                If CLng(a( 1 )) >= CLng(ad(i)(ii)) Then
                If CLng(a( 1 )) <= CLng(ad(i)(ii +  1 )) Then
                    s = ad(i)( 0 ): ii =  0 
                    Exit For
                End If
                End If
            Next ii
                If ii =  0  Then Exit For
            Next i
            If s = "" Then s = ad(Ub): i = Ub
ЗЫ: (!) работоспособность кода не проверял.
...
Рейтинг: 0 / 0
анализ строки
    #37480502
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конвертер отрабатывает без ошибок...
НО... Участок 3 реестр не создается... туда должен попасть этот абонент.
Код: plaintext
 6700038 : 20620 : 056 : 01 : 10 . 10 . 2011 : 10 . 2011 : 11 : 0 : 0 :БЕЗ АДРЕСА,БЕЗ АДРЕСА, 0 , 0 :ВВЕДИТЕ ИЛИ НАЖМИТЕ ДАЛЕЕ:; 375 . 39 ; 10 . 10 . 2011 ; 587731178 
Голову сломал не могу разобраться....
...
Рейтинг: 0 / 0
анализ строки
    #37480581
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы делал проще и иначе - весь текст в массив по строкам типа
Код: plaintext
1.
a = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Temp\ree_.txt",  1 ).ReadAll, Chr( 10 ))
, создаём 3 пустых массива по этому размеру, перебор массива строк, бъём текущую строку в массив на поля Split'ом по двоеточию (так ведь нужно делить?) ну или анализируем по Mid().
Затем анализируем 2-е поле типа так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub tt()
Dim x

'1 участок книги от 100-216
'2 участок книги от 257-514
x =  220 

Select Case x
Case  100  To  216 : MsgBox  1 
Case  257  To  514 : MsgBox  2 
Case Else: MsgBox "Else"
End Select

End Sub
По результату раскладываем текущую строку в один из 3-х созданных массивов.
В конце верхушку каждого массива выгружаем в свой лист и сохраняем.
Можно циклом по этим массивам.
И кстати так легко править условия - добавить/изменить участки, даже если добавится 4-я группа, то нужно всего-лишь добавить один пустой массив по аналогии.
...
Рейтинг: 0 / 0
анализ строки
    #37481065
balbesконвертер отрабатывает без ошибок...
НО... Участок 3 реестр не создается... туда должен попасть этот абонент.
Код: plaintext
 6700038 : 20620 : 056 : 01 : 10 . 10 . 2011 : 10 . 2011 : 11 : 0 : 0 :БЕЗ АДРЕСА,БЕЗ АДРЕСА, 0 , 0 :ВВЕДИТЕ ИЛИ НАЖМИТЕ ДАЛЕЕ:; 375 . 39 ; 10 . 10 . 2011 ; 587731178 
Голову сломал не могу разобраться....Ещё один патчик
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
            ' если текущий лист не совпадает с требуемым
            If ws.Name <> s Then
            On Error Resume Next
                ' "ищем" требуемый лист в новойкниге
                Set ws = ws.Parent.Worksheets(s)
                
                If Err.Number <>  0  Then
                ' не нашли - скопировали шаблон
                    Err.Clear
                    With ws.Parent.Worksheets
                    'ThisWorkbook.Worksheets(2).Copy After:=ws
                        ThisWorkbook.Worksheets( 2 ).Copy After:=.Item(.Count)
                    'With ActiveWorkbook.Worksheets
                        Set ws = .Item(.Count)
                    End With
                    Application.CutCopyMode = False
                    ws.Name = s
                End If
            On Error GoTo  0 
            End If
...
Рейтинг: 0 / 0
анализ строки
    #37481117
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GE пробуй камнем

Я уже путем титанических усилий тоже, определил, что при вставке последний лист переименовывается вместо, вставленного, но из-за не знания vba? парился с исправлением...

Вы как всегда меня выручили!...

ОГРОМНОЕ спасибо!...
...
Рейтинг: 0 / 0
анализ строки
    #37978621
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi ALL
помогите поправить конвертер. в полученные реестры после обработки нужно добавить "шапку" из оригинального txt, но исправить 2 строки
1- # 4810.00 ;Сумма реестра
2- # 9 ;Число записей
шапка реестра# 397 ;Номер реестра
# 4810.00 ;Сумма реестра - ИСПРАВИТЬ!!!
# 0.00 ;В том числе пеня
# 231.43 ;Удержанная сумма
# 15960.00 ;Сумма к перечислению
# 9 ;Число записей - ИСПРАВИТЬ!!!
# 670058 ;Код агента
# 49 ;Номер услуги
# 24/09/2012 00:00:00 ;Дата формирования реестра
# 21/09/2012 08:08:31 ;Начало диапазона дат документов, входящих в реестр
# 21/09/2012 17:35:34 ;Конец диапазона дат документов, входящих в реестр
#21/09/2012:332720:

оригинал реестра для обработки txt
# 397 ;Номер реестра
# 15960.00 ;Сумма реестра
# 0.00 ;В том числе пеня
# 231.43 ;Удержанная сумма
# 15960.00 ;Сумма к перечеслению
# 9 ;Число записей
# 670058 ;Код агента
# 49 ;Номер услуги
# 24/09/2012 00:00:00 ;Дата формирования реестра
# 21/09/2012 08:08:31 ;Начало диапазона дат документов, входящих в реестр
# 21/09/2012 17:35:34 ;Конец диапазона дат документов, входящих в реестр
#21/09/2012:332720:
6700038:20111:029:01:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:10941:1110136;3000.00;21/09/2012;5408614
6700038:20125:006:01:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:7183:1250089;650.00;21/09/2012;5409122
6700038:20777:002:18:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:0:;1500.00;21/09/2012;5409498
6700038:20187:061:01:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:20700:1870222;300.00;21/09/2012;5411416
6700038:20777:010:09:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:1:;8500.00;21/09/2012;5412687
6700038:20493:434:01:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:12200:4930122;450.00;21/09/2012;5413995
6700038:20777:007:74:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:1:;700.00;21/09/2012;5414237
6700038:20175:027:01:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:1:1750111;500.00;21/09/2012;5414306
6700038:20187:130:01:21/09/2012:09.2012:11:0:0:БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА,БЕЗ АДРЕСА:16770:1870103;360.00;21/09/2012;5417518
...
Рейтинг: 0 / 0
анализ строки
    #37992273
Hi balbes,
ещё бы неплохо было пароль на проект vba указать ))
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / анализ строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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