Цитата(AVL @ Jun 21 2013, 23:56)

Провел анализ предложенного Вами алгоритма.
Тестируемые случаиимпортированные схемы из P-Cad:
1) ChipName = "SN74HC00D", Value = "~"
2) ChipName = "К73-17", Value = "0,1 мкФ"
3) ChipName = "7400", Type = "SN74HC00D", Value = "~"
4) ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"
оригинальные схемы KiCad сразу после добавления компонента в схему (без каких пока еще корректировок полей)
5) ChipName = "7400", Value = "7400"
6) ChipName = "C", Value = "C"
оригинальные схемы KiCad при использовании в режиме навязанного кривого подхода
7) ChipName = "7400", Value = "SN74HC00D"
8) ChipName = "C", Value = "0,1 мкФ"
оригинальные схемы KiCad при использовании в режиме выправленного подхода
9) ChipName = "7400", Type = "SN74HC00D", Value = "~"
10) ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"
тестируемый алгоритмКод
if (ChipName==Value):
Type = ChipName
Value = "~"
else:
Type = "~"
Результирующие поля после обработки алгоритмом1) ChipName = "SN74HC00D", Type = "~", Value = "~": OK
2) ChipName = "К73-17", Type = "~", Value = "0,1 мкФ": OK
3,9) ChipName = "7400", Type = "SN74HC00D", Value = "~": OK
4,10) ChipName = "C", Type = "К73-17", Value = "0,1 мкФ": OK
5) [ChipName = "7400", Value = "7400"] => [ChipName = "7400", Type = "7400", Value = "~"]: OK
6) [ChipName = "C", Value = "C"] => [ChipName = "C", Type = "C", Value = "~"]: OK
7) ChipName = "7400", Type = "~", Value = "SN74HC00D": FAILED
8) ChipName = "C", Type = "~", Value = "0,1 мкФ": OK
В пункте 7 я пометил, что тест не пройден, потому что в поле "Value" реально попал не номинал, а тип.
Важно, чтобы тип был типом, а номинал был номиналом. В процессе формирования КД каждое поле обрабатывается своим специфическим алгоритмом. Если пытаться подменить их местами, то КД не будет сформирована корректно (как минимум не правильно будут сформированы группы компонентов и не правильно будет выполнена сортировка, одним словом наступит хаос).
С учетом имеющейся картины, появилась еще идея алгоритма №2. Однако ни о какой прозрачности для пользователя при таком подходе речи не идет. Но зато судя по анализу всех рассматриваемых тестовых случаев, работает!
На этапе конвертации pcad2kicad сделаю следующую обработку:
Код
if (Type==""):
Type = Chip Name
Тогда это позволит применить алгоритм №2 (см. ниже).
Тестируемые случаи с учетом доработки в конвертере pcad2kicadимпортированные схемы из P-Cad:
1) ChipName = "SN74HC00D", Type = "SN74HC00D", Value = "~"
2) ChipName = "К73-17", Type = "К73-17", Value = "0,1 мкФ"
3) ChipName = "7400", Type = "SN74HC00D", Value = "~"
4) ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"
оригинальные схемы KiCad сразу после добавления компонента в схему (без каких пока еще корректировок полей)
5) ChipName = "7400", Value = "7400"
6) ChipName = "C", Value = "C"
оригинальные схемы KiCad при использовании в режиме навязанного кривого подхода
7) ChipName = "7400", Value = "SN74HC00D"
8) ChipName = "C", Value = "0,1 мкФ"
оригинальные схемы KiCad при использовании в режиме выправленного подхода
9) ChipName = "7400", Type = "SN74HC00D", Value = "~"
10) ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"
тестируемый алгоритм №2 под кодовым названием "взрыв мозга"Здесь для понимания:
а) имена атрибутов на английском (ChipName, Type, Value) - это те атрибуты, которые хранятся в схеме.
б) имена полей на русском (Тип, Номинал) - это те поля, которые отображаются/редактируются в менеджере компонентов, и которые в результате поступают на вход генератора GOST-doc-gen.
Код
if (Type!=""):
Тип = Type
Номинал = Value
else if (Value=="~"):
Тип = Chip Name
Номинал = "~"
else:
Тип = Value
Номинал = "~"
Результирующие поля после обработки алгоритмом1) [ChipName = "SN74HC00D", Type = "SN74HC00D", Value = "~"] => [Тип = "SN74HC00D", Номинал = "~"]: OK
2) [ChipName = "К73-17", Type = "К73-17", Value = "0,1 мкФ"] => [Тип = "К73-17", Номинал = "0,1 мкФ"]: OK
3,9) [ChipName = "7400", Type = "SN74HC00D", Value = "~"] => [Тип = "SN74HC00D", Номинал = "~"]: OK
4,10) [ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"] => [Тип = "К73-17", Номинал = "0,1 мкФ"]: OK
5) [ChipName = "7400", Value = "7400"] => [Тип = "7400", Номинал = "~"]: OK
6) [ChipName = "C", Value = "C"] => [Тип = "C", Номинал = "~"]: OK
7) [ChipName = "7400", Value = "SN74HC00D"] => [Тип = "SN74HC00D", Номинал = "~"]: OK
8) [ChipName = "C", Value = "0,1 мкФ"] => [Тип = "0,1 мкФ", Номинал = "~"]: FAILED
Однако в пунте 8 в любом случае, чтобы сформировать КД нужно также указать какого же все-таки типа конденсатор. После добавления типа (через схему добавить и назначить атрибут Type, либо задать поле Тип через менеджер компонентов) будем иметь следующий тестовый случай:
8a) ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"
Тогда результирующие поля для данного тестового случая после обработки алгоритмом будут:
8a) [ChipName = "C", Type = "К73-17", Value = "0,1 мкФ"] => [Тип = "К73-17", Номинал = "0,1 мкФ"]: OK!