0 / 0 / 0
Регистрация: 12.08.2009
Сообщений: 6
1

==Автоматизация процесса==

12.08.2009, 20:53. Показов 2816. Ответов 12
Метки нет (Все метки)

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


453654____________________________ccb-2
__________________________________als-1
__________________________________tbi-1


423456____________________________ant-1
__________________________________clip-1
__________________________________oba-55

..........и так далее...
===================================================================
Как можно в ворде екселе или с помощью другой программы вывести в отдельную колонку, номера которые не имеют параметр tbi-1 и oba-55 напротив них(тоесть первый номер в списке выше)
Буду благодарен за любую помощь! СПАСИБО!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2009, 20:53
Ответы с готовыми решениями:

Автоматизация переходов.
Создал в PowerPoint презентацию из фотографий.Хочу,чтобы они автоматически менялись через 5 сек....

Автоматизация заполнения формы договора
Приветствую. Подскажите пожалуйста способ решения следующей задачи. Есть шаблон (форма) договора...

Автоматизация работы с шаблонами и документами
Добрый день! В наше время компьютерных технологий, подписанная бумажка все ровно не теряет свой...

Автоматизация сохранения docx в PDF
Доброго времени суток. Есть скрипт конвертации массива документов в папке из docx в doc. Выглядит...

12
3895 / 898 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
12.08.2009, 23:01 2
1) между номером и параметром нижнее подчеркивание или пробел?
2) каждый номер имеет ВСЕГДА по 3 строки?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.08.2009, 23:58 3
Положи в форум кусор реального файла с 3-5 блоками записей.
0
0 / 0 / 0
Регистрация: 12.08.2009
Сообщений: 6
13.08.2009, 12:40  [ТС] 4
Вот так выглядит файл который нам присылают! Было бы замечательно если программа будет выводить 4 списка: 1)номера которые имеют tbi-1 и oba-55
2) номера которые имеют только tbi-1
3) номера которые имеют только oba-55
4) номера которые не имеют ни tbi-1 ни oba-55.
СПАСИБО!
Вложения
Тип файла: txt deconlogfile.txt (32.9 Кб, 44 просмотров)
0
0 / 0 / 0
Регистрация: 12.08.2009
Сообщений: 6
13.08.2009, 12:42  [ТС] 5
Цитата Сообщение от Toxa33rus Посмотреть сообщение
1) между номером и параметром нижнее подчеркивание или пробел?
2) каждый номер имеет ВСЕГДА по 3 строки?
1)между номером и параметром пробел
2)номер может иметь и больше параметров!
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
13.08.2009, 18:44 6
Вот это что и что с ним делать ?
Код
        <suscp:snb=406645;
        SUBSCRIBER DATA
        SNB        DEV            DETY    SUT SCL         MIS             COS
        22406645                          NC
        END
И везде встречаются вот такие строки:
Код
        WO       RISC/131/6./A/4/0905   AT-4      TIME 090806 0905  PAGE    2
0
0 / 0 / 0
Регистрация: 12.08.2009
Сообщений: 6
13.08.2009, 19:04  [ТС] 7
Цитата Сообщение от odip Посмотреть сообщение
Вот это что и что с ним делать ?
Код
        <suscp:snb=406645;
        SUBSCRIBER DATA
        SNB        DEV            DETY    SUT SCL         MIS             COS
        22406645                          NC
        END
Если можно то и этот параметр "NC" тоже выводить в отдельную колонку
И везде встречаются вот такие строки:
Код
        WO       RISC/131/6./A/4/0905   AT-4      TIME 090806 0905  PAGE    2
А это ненужная информация и ее нужно пропускать!
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
13.08.2009, 20:16 8
Perl
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/usr/bin/perl
 
use 5.8.8; use strict; use warnings;
use IO::File; use Getopt::Long;
 
 
#####################################################################
# Functions
 
sub main();
sub print_help();
sub do_parselog($$);
sub print_snb($$$);
 
 
######################################################################
# Variables
 
my $debug= 0;
my $program_version= '0.9.0';
 
 
######################################################################
# Start
 
eval { main(); };
if ( $@ ) { print STDERR "$@"; exit 1; }
exit 0;
 
 
#### sub ####
sub main() {
my ($opt_help,$cmd);
 
# Parse arguments
GetOptions( 'help' => \$opt_help, 'verbose+' => \$debug );
if ( defined $opt_help ) { goto print_help; }
if ( scalar( @ARGV ) == 0 ) { goto print_help; }
 
$cmd= $ARGV[0];
if ( $cmd eq "parselog" ) {
    unless ( scalar( @ARGV ) == 3 ) { goto print_help; }
    do_parselog( $ARGV[1], $ARGV[2] );
} else {
    goto print_help;
}
 
# Return
return;
 
print_help:
print_help();
exit 2;
 
} #### main()
 
 
#### sub ####
sub print_help() {
 
print STDERR <<"EOF";
phone_tool.pl $program_version  Copyright (c) 2009 by ODiP
Phone Tool
 
Usage: phone_tool.pl [options] <command>
 
<Commands>
 
Parse logfile:
phone_tool.pl parselog logfile.txt outfile.txt
 
<Options>
--help           print this help
--verbose        increase verbose level
EOF
 
} #### print_help()
 
 
#### sub ####
sub do_parselog($$) {
my ($log_name,$out_name)= @_;
my ($flog,$fout);
my (@snb,$snb_index);
my ($state,$snb,%scl);
 
 
# Init
@snb= ( [], [], [], [] );
 
# Open
$flog= new IO::File $log_name, "<";
unless ( defined $flog ) { die "Error opening $log_name\n"; }
 
# Create
$fout= new IO::File $out_name, ">";
unless ( defined $fout ) { die "Error creating $out_name\n"; }
 
# Loop
$state= 0;
$snb= undef; %scl= ();
for ( ; ; ) {
    $_= $flog->getline(); last unless defined $_;
    chomp;
    if ( /^ +WO +(.*) +PAGE +(\d+)$/ ) { next; }
    if ( $state == 0 ) {
        if ( /^ +SUBSCRIBER DATA$/ ) {
            $state= 1;
            $snb= undef; %scl= ();
        }
    } elsif ( $state == 1 ) {
        if ( /^ +SNB +DEV +DETY +SUT +SCL +MIS +COS$/ ) {
            $state= 2;
        } else {
            die "Invalid format at line $.\n";
        }
    } elsif ( $state == 2 ) {
        if ( /^ +(\d+) +(\S+) +(\S+)$/ ) {
            $state= 3;
            $snb= $1; $scl{$3}= 1;
        } elsif ( /^ +(\d+) +(NC)$/ ) {
            $state= 3;
            $snb= $1; $scl{$2}= 1;
        } else {
            die "Invalid format at line $.\n";
        }
    } elsif ( $state == 3 ) {
        if ( /^ +END$/ ) {
            if ( $debug>=1 ) {
                print $fout "snb=$snb scl=", join( " ", sort keys %scl ), "\n";
            }
 
            # Store
            $snb_index= 0;
            $snb_index+= 1 if exists $scl{"OBA-55"};
            $snb_index+= 2 if exists $scl{"TBI-1"};
            push @{$snb[$snb_index]}, $snb;
 
            $state= 0;
            $snb= undef; %scl= ();
        } elsif ( /^ +(\S+)$/ ) {
            $scl{$1}= 1;
        } elsif ( /^ +$/ ) {
            # Skip
        } else {
            die "Invalid format at line $.\n";
        }
    }
}
 
# Post loop
unless ( $state == 0 ) { die "Invalid format at line $.\n"; }
 
# Print
print_snb( $snb[0], "# No OTB & TBI", $fout );
print_snb( $snb[1], "# OTB", $fout );
print_snb( $snb[2], "# TBI", $fout );
print_snb( $snb[3], "# OTB & TBI", $fout );
 
# Close
$fout->close();
$flog->close();  
 
} #### do_parselog()
 
 
#### sub ####
sub print_snb($$$) {
my ($psnb,$title,$fout)= @_;
 
print $fout $title, "\n";
if ( scalar( @{$psnb} ) > 0 ) {
    print $fout join( "\n", sort @{$psnb} ), "\n", "\n";
} else {
    print $fout "\n";
}
 
} #### print_snb()
 
 
__END__
Добавлено через 55 минут 11 секунд
Perl брать тут: www.activestate.com
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
13.08.2009, 21:19 9
Программа в аттаче. Для работы требуется .NET Framework

C#
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
public class DeconLog
{
    private static readonly Regex RxMatcher = new Regex(
        @"<suscp:snb=(?<Number>\d+);\s+SUBSCRIBER\sDATA\s+^.*$\s+(?:\d+)\s+(?:\w{3}-\d+)(?:\s+(?<Id>\p{L}{3}-\d+))*\s+END",
        RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Multiline);
 
    public DeconLog(string fileName)
    {
        string s;
        using (var sr = new StreamReader(fileName))
            s = sr.ReadToEnd().Trim();
        var matches = RxMatcher.Matches(s).Cast<Match>().Select(p => new
            {
                number_ = int.Parse(p.Groups["Number"].Value),
                ids_ = new List<string>(p.Groups["Id"].Captures.Cast<Capture>().Select(u => u.Value))
            });
 
        Console.WriteLine("Номера которые имеют только tbi-1");
        matches.Where(p => p.ids_.Count == 1 && p.ids_.Exists(u => u.ToUpper() == "TBI-1")).
            Select(p => p.number_).ToList().ForEach(Console.WriteLine);
        Console.WriteLine("Номера которые имеют только oba-55");
        matches.Where(p => p.ids_.Count == 1 && p.ids_.Exists(u => u.ToUpper() == "OBA-55")).
            Select(p => p.number_).ToList().ForEach(Console.WriteLine);
        Console.WriteLine("Номера которые не имеют ни tbi-1 ни oba-55");
        matches.Where(p => !p.ids_.Exists(u => u.ToUpper() == "TBI-1" || u.ToUpper() == "OBA-55"))
            .Select(p => p.number_).ToList().ForEach(Console.WriteLine);
    }
Запускать так: ConsoleApplication1.exe <Имя файла>
Вложения
Тип файла: zip ConsoleApplication1.zip (4.1 Кб, 14 просмотров)
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
14.08.2009, 11:36 10
Если можно то и этот параметр "NC" тоже выводить в отдельную колонку
В какую отдельную колонку ?

Добавлено через 2 минуты 17 секунд
А это ненужная информация и ее нужно пропускать!
Эта ненужная информация встречается совершенно в любой строке файла.
Я думаю из-за нее regexp написанный Rififi работать не будет
0
3895 / 898 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
14.08.2009, 14:50 11
Конечно не хорошо это: тема про ворд а коды все подряд кидаем, но вот мой код до коллекции. Уже на VBA
Макрос для экселя! Строит таблицу из 4-х столбцов согласно нового условия:
Цитата Сообщение от zenner Посмотреть сообщение
1)номера которые имеют tbi-1 и oba-55
2) номера которые имеют только tbi-1
3) номера которые имеют только oba-55
4) номера которые не имеют ни tbi-1 ни oba-55.
Visual Basic
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sub main()
On Error Resume Next
Dim File As String
Dim tmpStr As String
Dim currRow As Integer
Dim TBI1 As Boolean
Dim OBA55 As Boolean
Dim rowA As Integer, rowB As Integer, rowC As Integer, rowD As Integer
 
File = "C:\Documents and Settings\Admin\Рабочий стол\deconlogfile.txt"
 
rowA = 1
rowB = 1
rowC = 1
rowD = 1
 
Open File For Input As #1
Do While Not EOF(1)
  Input #1, tmpStr
  If InStr(tmpStr, "DETY    SUT SCL") > 0 Then
    Input #1, currInt
    If Val(currInt) = 0 Then
        Input #1, currInt
    End If
    tmpStr = currInt
    TBI1 = False
    OBA55 = False
    
    Do While InStr(tmpStr, "END") = 0
      TBI1 = TBI1 Or InStr(tmpStr, "TBI-1") > 0
      OBA55 = OBA55 Or InStr(tmpStr, "OBA-55") > 0
      Input #1, tmpStr
    Loop
    
    If TBI1 And OBA55 Then
      Cells(rowA, 1).Value = (currInt)
      rowA = rowA + 1
    ElseIf TBI1 And Not OBA55 Then
      Cells(rowB, 2).Value = (currInt)
      rowB = rowB + 1
    ElseIf Not TBI1 And OBA55 Then
      Cells(rowC, 3).Value = (currInt)
      rowC = rowC + 1
    ElseIf Not TBI1 And Not OBA55 Then
      Cells(rowD, 4).Value = (currInt)
      rowD = rowD + 1
    
    End If
  End If
Loop
Close #1
 
End Sub
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
14.08.2009, 16:12 12
тема про ворд
Тема не про Word, просто автор не знает на чем это можно сделать.
И потом - Как можно в ворде екселе или с помощью другой программы
0
3895 / 898 / 122
Регистрация: 16.04.2009
Сообщений: 1,824
14.08.2009, 17:10 13
Ой, у меня там косячок небольшой: начиная с 36 строки там где (currInt) надо Val(currInt)
Пока отлаживал убрал а обратно вернуть забыл
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2009, 17:10
Помогаю со студенческими работами здесь

Автоматизация нажатия клавиш Ctrl+Shift+F9
Проблема состоит в автоматизации нажатия клавиш Ctrl+A затем Ctrl+Shift+F9 для нескольких...

Автоматизация сохранения данных в разных документах
Здравствуйте! У меня на работе есть 3 вордовских дока с таблицами пусть они называются: 1.doc,...

Оптимизация и автоматизация работы с большим количеством данных
Прошу прощения за краткость в названии темы, но коротко ее не опишешь. Дело вот в чем. Мой отец -...

Автоматизация создания стиля для документа MS Office
День добрый, у меня вот такое задание: Автоматизация создания стиля для документа MS Office с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru