Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2009, 21:02   #1
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию ==Автоматизация процесса==

Добрый День Уважаемые програмисты!!!Помогите пожалуйста в решении следующей задачи.Я работаю на телефонной станции и к нам один раз в месяц приходят огромные по размеру текстовые файлы следующего типа:
=================================== =============== ==================
434456___________________________ip t-2
_________________________________an t-1
_________________________________cb a-4


453654____________________________c cb-2
__________________________________a ls-1
__________________________________t bi-1


423456____________________________a nt-1
__________________________________c lip-1
__________________________________o ba-55

..........и так далее...
=================================== =============== =================
Как можно в ворде екселе или с помощью другой программы вывести в отдельную колонку, номера которые не имеют параметр tbi-1 и oba-55 напротив них(тоесть первый номер в списке выше)
Буду благодарен за любую помощь! СПАСИБО!!!
zenner вне форума Ответить с цитированием
Старый 12.08.2009, 23:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
огромные по размеру текстовые файлы
в архиве много занимает?
Если нет - выкладывайте пример файла, помозгуем..
Если же файл даже в архиве большой - тогда вырезайте кусочек (желательно через FAR) и дайте кусок реального файла.

p.s. думаю, что смогу написать Вам готовую программку (на Delphi), формирующую нужный отчёт...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.08.2009, 12:45   #3
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Вот так выглядит файл который нам присылают! Было бы замечательно если программа будет выводить 4 списка: 1)номера которые имеют tbi-1 и oba-55
2) номера которые имеют только tbi-1
3) номера которые имеют только oba-55
4) номера которые не имеют ни tbi-1 ни oba-55.
СПАСИБО!
Вложения
Тип файла: txt deconlogfile.txt (6.5 Кб, 154 просмотров)
zenner вне форума Ответить с цитированием
Старый 13.08.2009, 16:37   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте такой вариант:



Вот весь код:
Код:
Option Compare Text

Sub Поиск_AXE_10()
    On Error Resume Next: Application.ScreenUpdating = False
    Filename = GetTXTFileName: If Filename = "" Then Exit Sub

    Set fso = CreateObject("scripting.filesystemobject")    ' считываем текст из файла
    Set ts = fso.OpenTextFile(Filename, 1, True): txt = ts.ReadAll: ts.Close

    arr = Split(txt, vbNewLine & "        " & "END" & vbNewLine)
    Dim tbi1 As Boolean, oba55 As Boolean
    For i = LBound(arr) To UBound(arr)
        t = arr(i)    ' текст одной записи
        tbi1 = InStr(1, t, "tbi-1")    ' ищем  tbi1
        oba55 = InStr(1, t, "oba-55")    ' ищем  oba55
        If tbi1 And oba55 Then Range("a" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If tbi1 And Not oba55 Then Range("b" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If oba55 And Not tbi1 Then Range("c" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If Not oba55 And Not tbi1 Then Range("d" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
    Next i
End Sub

Sub Очистка()
    [a2:d65000].ClearContents
End Sub

Function Номер(ByVal txt As String) As String
    arr = Split(txt, vbNewLine)
    For i = LBound(arr) To UBound(arr)
        If Val(arr(i)) Then Номер = Val(arr(i)): Exit Function
    Next i
End Function

Function GetTXTFileName() As String
    res = Application.GetOpenFilename("AXE-10 printouts (*.txt),", , "Выберите файл для обработки", "Открыть")
    If VarType(res) = vbBoolean Then GetTXTFileName = "" Else GetTXTFileName = res
End Function

Последний раз редактировалось EducatedFool; 01.11.2009 в 10:48.
EducatedFool вне форума Ответить с цитированием
Старый 13.08.2009, 17:15   #5
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Спасибо Вам БОЛЬШОЕ за помощь!Завтра на работе попробую!!!!
А можно еще добавить чтобы программа выискивала отдельно все номера с параметром "NC" и отдельно с "tbo-1".

Последний раз редактировалось zenner; 13.08.2009 в 17:45.
zenner вне форума Ответить с цитированием
Старый 13.08.2009, 23:56   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

zenner, отпишитесь о результатах.
просто впустую рисовать код не хочется... Если задача решена благодаря помощи EducatedFool (респект, коллега!), то тогда тема закрыта?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2009, 00:38   #7
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
zenner, отпишитесь о результатах.
просто впустую рисовать код не хочется... Если задача решена благодаря помощи EducatedFool (респект, коллега!), то тогда тема закрыта?..
EducatedFool , От всей души Благодарю Вас за оказанную помощь! Все работает ИДЕАЛЬНО!!!Единственная просьба это добавить в код макросса еще две колонки с "NC" и "tbo-1". Через 2 недели получаю зарплату и обязательно отблагодарю Вас за оказанную помощь!!!!!СПАСИБО!!!
zenner вне форума Ответить с цитированием
Старый 14.08.2009, 01:33   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можете попробовать самостоятельно модернизировать макрос - там нет ничего сложного:
Код:
Sub Поиск_AXE_10()
    On Error Resume Next: Application.ScreenUpdating = False
    Filename = GetTXTFileName: If Filename = "" Then Exit Sub

    Set fso = CreateObject("scripting.filesystemobject")    ' считываем текст из файла
    Set ts = fso.OpenTextFile(Filename, 1, True): txt = ts.ReadAll: ts.Close

    arr = Split(txt, vbNewLine & "        " & "END" & vbNewLine)

    Dim tbi1 As Boolean, oba55 As Boolean, tbo1 As Boolean, nc As Boolean

    For i = LBound(arr) To UBound(arr)
        t = arr(i)    ' текст одной записи
        tbi1 = InStr(1, t, "tbi-1")    ' ищем  tbi-1
        oba55 = InStr(1, t, "oba-55")    ' ищем  oba-55
        tbo1 = InStr(1, t, "tbo-1")    ' ищем  tbo-1
        nc = InStr(1, t, "nc")   ' ищем  nc

        If tbi1 And oba55 Then Range("a" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If tbi1 And Not oba55 Then Range("b" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If oba55 And Not tbi1 Then Range("c" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If Not oba55 And Not tbi1 Then Range("d" & Rows.Count).End(xlUp).Offset(1) = Номер(t)

        If tbo1 Then Range("e" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
        If nc Then Range("f" & Rows.Count).End(xlUp).Offset(1) = Номер(t)
    Next i
End Sub
Добавленные строки выделены красным.

EducatedFool вне форума Ответить с цитированием
Старый 17.08.2009, 12:57   #9
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Уважаемый EducatedFool ! Извините за наглость но я хотел переделать Ваш макрос для еще одной цели но никак не получается! В этом файле нужно вывести все номера с параметром IR. У меня не получается их вывести, не вижу где в коде макроса описываются координаты текста IR.
Вложения
Тип файла: txt SLFAP.txt (3.1 Кб, 128 просмотров)
zenner вне форума Ответить с цитированием
Старый 17.08.2009, 13:50   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

С чего Вы взяли, что макрос сможет обработать этот файл?
У него ведь другой формат - соответственно, макрос надо заметно переделывать.

В данном случае всё проще:
Код:
Sub Поиск()
    On Error Resume Next: Application.ScreenUpdating = False
    Filename = GetTXTFileName: If Filename = "" Then Exit Sub

    Set fso = CreateObject("scripting.filesystemobject")    ' считываем текст из файла
    Set ts = fso.OpenTextFile(Filename, 1, True): txt = ts.ReadAll: ts.Close

    arr = Split(txt, vbNewLine)
    For i = LBound(arr) To UBound(arr)
        arr2 = Split(WorksheetFunction.Trim(arr(i)), " ")
        If arr2(3) = "IR" Then Range("a" & Rows.Count).End(xlUp).Offset(1) = arr2(2)
    Next i
End Sub
Вложения
Тип файла: rar Sample__14-08-2009__3-36-33.rar (9.7 Кб, 15 просмотров)
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
автоматизация процесса из страницы браузера Planovoi Помощь студентам 2 19.09.2011 15:55
автоматизация процесса cheshiki1 Microsoft Office Excel 2 29.05.2009 16:29
автоматизация процесса финплана! reginok Microsoft Office Excel 10 25.05.2009 12:32
автоматизация в столовой Egavga Microsoft Office Excel 1 15.07.2008 14:02
Автоматизация юр фирмы NeZамужем Помощь студентам 1 27.03.2008 01:30