Я работаю над сценарием для импорта информации о компонентах для SketchUp. Очень полезный человек на их странице помощи, помог мне в создании того, который работает с «отредактированным» текстовым файлом построчно. Теперь я готов перейти на следующий уровень - импортировать напрямую из исходного файла, созданного FreePCB.
Часть файла, которую я хочу использовать, находится ниже: "sample_1.txt"
[parts]
part: C1
ref_text: 1270000 127000 0 -7620000 1270000 1
package: "CAP-AX-10X18-7X"
value: "4.7pF" 1270000 127000 0 1270000 1270000 1
shape: "CAP-AX-10X18-7"
pos: 10160000 10160000 0 0 0
part: IC1
ref_text: 1270000 177800 270 2540000 2286000 1
package: "DIP-8-3X"
value: "JRC 4558" 1270000 177800 270 10668000 508000 0
shape: "DIP-8-3"
pos: 2540000 27940000 0 90 0
part: R1
ref_text: 1270000 127000 0 3380000 -600000 1
package: "RES-CF-1/4W-4X"
value: "470" 1270000 127000 0 2180000 -2900000 0
shape: "RES-CF-1/4W-4"
pos: 15240000 20320000 0 270 0
Слово [части] в скобках - это просто заголовок раздела. Информация, которую я хочу извлечь, - это обозначение, форма, положение и поворот. У меня уже есть код для этого из переформатированного текстового файла, используя IO.readlines(file).each{ |line| data = line.split(" ");
.
Мой текущий метод использует текстовый файл, переформатированный следующим образом: "sample_2.txt"
C1 CAP-AX-10X18-7 10160000 10160000 0 0 0
IC1 DIP-8-3 2540000 27940000 0 90 0
R1 RES-CF-1/4W-4 15240000 20320000 0 270 0
Затем я использую массив для извлечения данных [0], данных [1], данных [2], данных [3] и данных [5].
Плюс дополнительный шаг, добавляющий «.skp» в конец имени пакета, чтобы позволить сценарию вставлять компоненты с тем же именем, что и пакет.
Я хотел бы извлечь информацию из 1-го примера, без необходимости переформатировать файл, как в случае со 2-м примером. то есть я знаю, как извлечь информацию из одной строки, разделенной пробелами. Как мне это сделать, когда текст для одного массива отображается в нескольких строках?
Заранее спасибо за любую помощь; -)
РЕДАКТИРОВАТЬ: Ниже приведен полный код для анализа "sample_2.txt", который был переформатирован до запуска сценария.
# import.rb - extracts component info from text file
# Launch file browser
file=UI.openpanel "Open Text File", "c:\\", "*.txt"
# Do for each line, what appears in braces {}
IO.readlines(file).each{ |line| data = line.split(" ");
# Append second element in array "data[1]", with SketchUp file extension
data[1] += ".skp"
# Search for component with same name as data[1], and insert in component browser
component_path = Sketchup.find_support_file data[1] ,"Components"
component_def = Sketchup.active_model.definitions.load component_path
# Create transformation from "origin" to point "location", convert data[] to float
location = [data[2].to_f, data[3].to_f, 0]
translation = Geom::Transformation.new location
# Convert rotation "data[5]" to radians, and into float
angle = data[5].to_f*Math::PI/180.to_f
rotation = Geom::Transformation.rotation [0,0,0], [0,0,1], angle
# Insert an instance of component in model, and apply transformation
instance = Sketchup.active_model.entities.add_instance component_def, translation*rotation
# Rename component
instance.name=data[0]
# Ending brace for "IO.readlines(file).each{"
}
В результате получается следующий вывод: из файла import.rb открывается файл sample_2.txt.
C1 CAP-AX-10X18-7 10160000 10160000 0<br>IC1 DIP-8-3 2540000 27940000 90<br>R1 RES-CF-1/4W-4 15240000 20320000 270
Я пытаюсь получить те же результаты из неотредактированного исходного файла "sample_1.txt", без дополнительного шага удаления информации из файла, с помощью блокнота "sample_2.txt". Ключевые слова, за которыми следует двоеточие (part, shape, pos), появляются только в этой части документа, и нигде больше, но ... документ довольно длинный, и мне нужен сценарий, чтобы игнорировать все, что появляется раньше, и после, раздел [parts].