Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Icecold1
0 / 0 / 0
Регистрация: 09.01.2019
Сообщений: 6
1

Скрипт для обработки текста

15.01.2019, 01:42. Просмотров 104. Ответов 1
Метки нет (Все метки)

Добрый вечер, форумчане.

Приветствую. Сижу уже третьи сутки, никак не могу придумать скрипт обработки нижеуказанного кода, с целью
подсчета сколько в каждом .SUBCKT групп элементов(элементы SWITCH1, SWITCH2 и другие - могут быть разные названия) и вывести количество .SUBCKT с двумя группами этих элементов. В данном случае результатом должнен быть 1 - второй .SUBCKT ADG.

Подскажите конструкцию для реализации, пожалуйста.
Код
* ADG511_3 Spice Macromodel                      
* Description: Converter
* END Notes
*
* Node assignments
*                  IN1 
*                  | D1
*                  | | S1
*                  | | | VSS
*                  | | | | GND
*                  | | | | | S4
*                  | | | | | | D4
*                  | | | | | | | IN4
*                  | | | | | | | | IN3
*                  | | | | | | | | | D3
*                  | | | | | | | | | |  S3
*                  | | | | | | | | | |  |  VL
*                  | | | | | | | | | |  |  |  VDD
*                  | | | | | | | | | |  |  |  |  S2
*                  | | | | | | | | | |  |  |  |  |  D2
*                  | | | | | | | | | |  |  |  |  |  |  IN2
*                  | | | | | | | | | |  |  |  |  |  |  |
.SUBCKT ADG511_3   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
* SWITCH 1
*
MP1   20  1   12  12  PCNTRL  L=6E-6 W=90E-6
MN1   20  1   5   5   NCNTRL  L=6E-6 W=210E-6
CSD1  2   3   1.3E-12 xSWITCH
*
* SWITCH 2
MP4   30  16  12  12  PCNTRL  L=6E-6 W=90E-6
MN4   30  16  5   5   NCNTRL  L=6E-6 W=120E-6
*
* SWITCH 3
MP7   40  9   12  12  PCNTRL  L=6E-6 W=90E-6
MN7   40  9   5   5   NCNTRL  L=6E-6 W=210E-6
IL3   9   5   5E-9
C5    40  4   120P
MP8   41  42  13  13  PCNTRL  L=6E-6 W=20E-6
MN8   41  42  4   4   NCNTRL  L=6E-6 W=20E-6
*
.MODEL  PCNTRL  PMOS(VTO=-.2 RD=0.1 RS=0.1)
.MODEL  NCNTRL  NMOS(VTO=.2 RD=.1 RS=.1)
.MODEL  PSW     PMOS(LEVEL=1 VTO=-1 GAMMA=0.3772 PHI=0.5 RS=5
+ UO=279.4 TOX=100E-9 LAMBDA =0.3141 CGSO=172.6E-12 KP=4.5E-5
+ CGDO=172.6E-12 CGBO=69.1E-12 CJ=120E-12
+ CJSW=597E-6 JS=3.2E-6 KF=1E-30 AF=1) 
.MODEL  NSW     NMOS(LEVEL=1 VTO=0 GAMMA=1.412 PHI=0.7 RS=10
+ UO=662.6 TOX=100E-9 LAMBDA=.013 CGSO=172.6E-12 KP=3.5E-5
+ CGDO=172.6E-12 CGBO=69.1E-12 CJ=170E-6
+ CJSW=298E-6 JS=2.7E-6 KF=3.6E-29 AF=1)
.ENDS ADG511_3
.END
.SUBCKT ADG
* SWITCH 1
*
MP1   20  1   12  12  PCNTRL  L=6E-6 W=90E-6
MN1   20  1   5   5   NCNTRL  L=6E-6 W=210E-6
CSD1  2   3   1.3E-12 xSWITCH
*
* SWITCH 2
MP4   30  16  12  12  PCNTRL  L=6E-6 W=90E-6
MN4   30  16  5   5   NCNTRL  L=6E-6 W=120E-6
*
.MODEL  PCNTRL  PMOS(VTO=-.2 RD=0.1 RS=0.1)
.MODEL  NCNTRL  NMOS(VTO=.2 RD=.1 RS=.1)
.MODEL  PSW     PMOS(LEVEL=1 VTO=-1 GAMMA=0.3772 PHI=0.5 RS=5
+ UO=279.4 TOX=100E-9 LAMBDA =0.3141 CGSO=172.6E-12 KP=4.5E-5
+ CGDO=172.6E-12 CGBO=69.1E-12 CJ=120E-12
+ CJSW=597E-6 JS=3.2E-6 KF=1E-30 AF=1) 
.MODEL  NSW     NMOS(LEVEL=1 VTO=0 GAMMA=1.412 PHI=0.7 RS=10
+ UO=662.6 TOX=100E-9 LAMBDA=.013 CGSO=172.6E-12 KP=3.5E-5
+ CGDO=172.6E-12 CGBO=69.1E-12 CJ=170E-6
+ CJSW=298E-6 JS=2.7E-6 KF=3.6E-29 AF=1)
.ENDS ADG
.END
Добавлено через 2 часа 38 минут
Появилась мысль, только не знаю как реализовать конструкцию.
Довольно трудно ориентируюсь в программировании.

Подскажите, как сделать цикл, который проверяет каждый блок от .SUBCKT до .END строки на наличие 6 строк, начинающихся с "*".

Если да - то счетчик переменной увеличивается на 1, в противном случае значение переменной не инкрементируется..

Добавлено через 4 часа 54 минуты
Написал скрипт:
Python
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
with open("ad734.cir", 'r') as f:
#with open("test.cir", 'r') as f:
    result={}
    currentBlock=None
    q=[]    
 
    data=f.readlines()
    
    for i in data:
 
        if '.SUBCKT' in i:
            currentBlock=i
            result[currentBlock]=0
        if i.startswith('* ') and len(i) >=2:
            result[currentBlock] +=1
    #print(i)
    #print(len(i))
    #print(result)
    for i in result:
        q.append(result[i])
    q=' '.join(str(q))
    q=q.split(' ')
    q=q.count('2')
    print(q)
Обкатал на тестовом файле:
Код
.SUBCKT b
*
* LA1
*
*
* LA2
*
.ENDS b
.SUBCKT 2
*
* LA3
*
*
* LA4
*
*
* LA5
*
.ENDS 2
В нем всё хорошо, а когда загружаю боевые файлы, как привёл в первом сообщении, возникает ошибка:

Код
Traceback (most recent call last):
  File "a.py", line 18, in <module>
    result[currentBlock] +=1
KeyError: None
Помогите понять, что не так.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2019, 01:42
Ответы с готовыми решениями:

Скрипт сравнения текста и его замены
Сам я, увы программировать не умею, долго искал в интернете нечто подобное, но увы, ничего не...

Выбор файла для обработки
Есть простенький код для анализа инфы из файла, хочу создать для него GUI, но никогда с ним не...

Создайте класс для обработки имеющихся данных
Здравствуйте. Уважаемы формучане, помогите подалуйста с задачей по классам. Помогите...

скрипт для Notepad++
Есть xml файл, с помощью скрипта для notepad++, в нем нужно найти все строчки...

Скрипт для навигации по сайту
Здравствуйте, питон 3 + селениум, (толком даже синтаксис не знаю) но очень надо... сделала вход на...

1
ioprst
209 / 149 / 94
Регистрация: 12.03.2018
Сообщений: 572
15.01.2019, 08:21 2
У вас изначально в словаре result нет элемента с ключом None, вы в 18 строке обращаетесь к нему => исключение KeyError.
Python
1
2
3
4
result={}
currentBlock=None
result[currentBlock] = 0
q=[]
Выдает ответ: 2
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2019, 08:21

Скрипт для Call of Duty
Здравствуйте! Кто имеет свободное время, я знаю что это не трудно, просто знаний по языку не...

Скрипт для перемещения курсора
Всем привет, вообщем появилась необходимость такого скрипта, чтобы иногда курсор двигался с...

Запустить скрипт для передачи файла на сервер
клиентский и серверный скрипт для передачи файла от клиента к серверу через интернет. Считаем...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru