在 Ruby 中解析文本

2024-03-15

我正在编写一个用于导入 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

然后,我使用数组来提取 data[0]、data[1]、data[2]、data[3] 和 data[5]。 再加上一个额外的步骤,将“.skp”附加到包名称的末尾,以允许脚本插入与包同名的组件。

我想从第一个示例中提取信息,而不必像第二个示例那样重新格式化文件。即,我知道如何从单个字符串中提取信息,并用空格分隔 - 当一个数组的文本出现在多行上时,我该怎么做?

预先感谢您的帮助;-)

编辑:下面是解析“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”从文件中删除信息的额外步骤。关键字,后跟冒号(部分,形状,位置),仅出现在文档的这一部分中,而没有出现在其他地方,但是......文档相当冗长,我需要脚本忽略之前出现的所有内容之后是 [parts] 部分。


你的问题不太清楚,但是:

text.scan(/^\s+shape: "(.*?)"\s+pos: (\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/)

会给你:

[["CAP-AX-10X18-7", "10160000", "10160000", "0", "0", "0"],
 ["DIP-8-3", "2540000", "27940000", "0", "90", "0"],
 ["RES-CF-1/4W-4", "15240000", "20320000", "0", "270", "0"]]

问题更改后添加

This:

text.scan(/^\s*part:\s*(.*?)$.*?\s+shape:\s*"(.*?)"\s+pos:\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m)

会给你

[["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"]]

第二次在问题更改后添加

This:

text.scan(/^\s*part:\s*(.*?)$.*?\s+shape:\s*"(.*?)"\s+pos:\s*(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)/m)

会让你捕获数字,即使它们是负数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby 中解析文本 的相关文章

  • Rails 4 - 如何安装“jquery-ui”?

    为了使用 jquery 自动完成插件 我需要安装jquery ui gem 到目前为止 我的 gemfile 中有以下内容 gem jquery rails 所以我补充道 gem jquery ui rails And to applica
  • 如何设置和获取Redis中存储的对象?

    我试图在 redis 中存储一个对象 当我获取该对象时 它似乎不起作用 I tried u User new u name blankman redis set test u x redis get test x name error 我想
  • Jekyll 服务错误:找不到 gem jekyll (>= 0.a) (Gem::GemNotFoundException

    做的时候sudo jekyll serve我收到以下错误 Users myusername rvm rubies ruby 2 4 2 lib ruby site ruby 2 4 0 rubygems rb 271 in find spe
  • Ruby IMAP IDLE 并发 - 如何解决?

    我正在尝试构建一个 目前是私有的 Web 应用程序 该应用程序将利用 IMAP IDLE 连接在人们到达时显示电子邮件 我很难弄清楚如何将其组合在一起 以及它如何与我的 Heroku RoR 服务器结合在一起 我编写了一个用于连接到 IMA
  • 您推荐使用哪些工具来分析 Rails 应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找 Rails 的分析工具 我目前正在玩和测试 ruby prof 和 Railsbench 但我对使其工作所需的大量调整和修改
  • 如何使用符号来标识 ruby​​ 方法中的参数

    我正在学习 Rails 并回到 ruby 来了解 Rails 中的方法 以及 ruby 的实际工作原理 当我看到如下方法调用时 validates first name presence gt true 我有点迷惑不解了 如何在 ruby
  • CSS - 将文本保留在图像下方

    我正在尝试创建一个简单的图片库 有人告诉我使用 float left 但是当我这样做时 页脚中的所有文本都会射到第一张图像 我已经搜索了大约一个小时试图找到解决方案 但我找不到任何东西 我尝试过使用边距 边框 不同的对齐方式和各种不同的小东
  • 单表继承发现问题

    我有以下3个rails类 它们都存储在一张表中 使用rails的单表继承 class Template lt ActiveRecord Base class ThingTemplate lt Template class StockThin
  • 使用 bcrypt-ruby 使用版本 $2y 验证哈希密码

    我们陷入了困境 需要使用 Ruby 根据现有的用户数据库对用户进行身份验证 用户的密码都是使用password compat PHP库生成的 所有散列密码均以 2y 开头 我一直在使用 bcrypt ruby 尝试对用户进行身份验证 但没有
  • Codekit文件权限问题(只读文件系统@dir_s_mkdir - /.sass-cache)

    出现以下错误 Compiling failed with this error Errno EROFS on line 239 of System Library Frameworks Ruby framework Versions 2 6
  • 如何将 rubocop 与 Rake 集成?

    rubocop https github com bbatsov rubocop是 Ruby 的代码风格检查器 与 rubocop 类似的工具 Cane 可以与 Rake 集成 https github com square cane in
  • 如何在 Ruby 中将一个数组添加到另一个数组而不最终得到多维结果?

    I tried somearray some thing anotherarray another thing somearray push anotherarray flatten 我期望 some thing another thing
  • 定制导轨配置部分

    为 Rails 应用程序创建自定义配置部分的最佳方法是什么 理想情况下 我希望最终结果是一个 api 调用 例如 Rails configuration foo bar Rails configuration foo baz e g Rai
  • 安装 Sass 时出错(Ruby 2.5.0.1、MSYS2 20161025.0.0)

    我尝试安装 Sass 我安装了Ruby and MSYS2在此之前 来自所有人的最新消息巧克力味 https chocolatey org choco install ruby choco install msys2 看来它们已正确安装 r
  • ruby中如何获取屏幕分辨率

    如何在ruby脚本中获取屏幕分辨率 高度 宽度 在 Linux 上 x y xrandr scan current d x d flatten 在 Windows 上 使用WIN32OLE等 http www ruby forum com
  • Ruby 反向柯里化:这可能吗?

    关于 Ruby 1 9 x 中的柯里化 我一直在某些地方使用它 并且可以像基本上支持 proc 参数的默认参数一样进行翻译 p proc x y z x y z p curry 1 gt returns a lambda p curry 1
  • 替换文件中两个标记之间的内容

    使用 ruby 不是 Rails 我试图弄清楚如何用字符串替换 而不是追加 静态文件中的某个块 例如 在 static file html 中 我想替换 html 注释 start 和 end 之间的所有内容 p lorem ipsum b
  • 在轮询器内异步运行代码

    在我的 ruby 脚本中 我使用 celluloid zmq gem 我尝试在轮询器内异步运行评估响应 使用 async evaluate response socket read multipart 但是 如果我从循环中删除睡眠 不知何故
  • Linux 文本文件操作

    我有一个格式的文件 a href a href a href a href 我需要选择 之后但 之前的文本 并将其打印在行尾 添加后 例如 a href http www wowhead com search Su a a a a a
  • 如何保存包含框架/iframe 的完整 html 页面?

    在网页抓取期间 我想将当前页面的 html 保存到文件中以供以后调试 browser html在大多数情况下有帮助 但是当页面包含 iframe frame 时 它 的内容不会返回browser html 我必须用类似的东西单独得到它bro

随机推荐

  • 如何修复未捕获的 DOMException:无法在“历史记录”上执行“pushState”

    我有这个小应用程序 可以在 webpack dev server 的开发模式下正常工作 但是当我使用生产模式生成的 dist 文件夹中的捆绑文件时 我在浏览器中得到的只是以下错误 Uncaught DOMException Failed t
  • 无法从标量中提取元素

    我有 2 张表公司和联系人 联系人具有地址 JSONB 列 我尝试使用 contact linked to company 上的连接并使用 jsonb array elements company addresses 进行 select 语
  • Vuejs 获取事件正在调用的元素?

    我有多个列表项 我想在单击它们时打开活动类 ul class list body li Pils li li Dubbel li li Tripel li li Quadrupel li li Wit li ul 我已经有一个setFilt
  • 如何使用 PHP 将文件 POST 到 REST 服务器而不将文件写入磁盘?

    我正在尝试将 XML 文件作为内部 API 的 POST 方法的一部分发送到服务器 所有 PHP 文档都指出使用 postVars file path to file xml 来实际发送文件 我想从字符串发送文件 但它仍然需要作为文件上传而
  • 在.NET Framework 2中播放PCM数据?

    我有一个从相机中提取的 u Law 压缩 PCM 数据流 我需要在扬声器上播放它吗 有人知道怎么做吗 我尝试过将 u Law 解码为普通的 WAV 数据 然后使用 SoundPlayer 但它似乎从来没有工作过 SoundPlayer 总是
  • 在函数参数中使用await

    是否可以使用带有参数的await 例如 const run async gt getStudentDetails await getStudentId 即使是这样 这似乎也不是最好的主意 以前有人这样做过吗 是的 您可以使用await每个任
  • 提供继承的静态属性(概念上)

    我有一个 C 基类 我要根据每个类型 而不是每个实例 将信息与其关联 本质上 我希望所有子类都呈现一个 Icon 和一个代表该类型的FriendlyName 我想not必须创建一个类型实例来获取此信息 并且我想要求所有子类提供此信息 理想情
  • 将 Xcode 包版本设置为 git hash

    在 Xcode 中 我想将项目捆绑包版本设置为 git 哈希 以在修订版本和构建之间创建唯一的链接 我已经看到了几篇关于此的帖子 增加了每个版本的内部版本号 但对我来说这似乎过多 我希望有一个内部版本号 测试人员可以在发件人反馈时参考 我在
  • 当通过 JavaScript 设置时,溢出:隐藏不适用于 Firefox 5

    这已被证实是 Firefox 中的一个错误 您可以在以下位置了解更多信息 https bugzilla mozilla org show bug cgi id 686247 https bugzilla mozilla org show b
  • 如何从字符串中删除
    标签等?

    我需要脱掉所有 br 和所有 引号 和所有 和 并仅用空格替换它们 我怎样才能做到这一点 PHP 语言 我已经尝试过这个 br description preg replace br description 但它又回来了 lt gt 代替每
  • Microsoft.Office.Interop.* 版本 12 和 14 之间有什么区别?

    我已经安装了 Visual Studio 2010 和 Office 2007 当我转到 添加引用 并搜索 Office Interop 时 我可以看到每个引用在版本 12 和 14 中出现两次 我最初尝试了版本 14Microsoft O
  • 如何在 Visual Studio 2010 上安装 Symbolic C++?

    我有Symbolic C 可以与V集成的版本 没有关于如何安装它的文档 我从这个网站得到它 它有它如何工作的示例 http issc uj ac za symbolic symbolic html http issc uj ac za sy
  • 使用来自多个(虚拟)机器的单个 emacs 实例

    我喜欢 emacsclient 它允许我使用单个 Emacs 框架进行所有编辑 甚至当程序想要打开编辑器时 即export EDITOR emacsclient 我也想让它在虚拟机上也能这样工作 我可以在我的单帧设置中使用 Tramp 来使
  • MouseLeftButtonDown 没有被解雇

    我有一个从 UserControl 类派生的 WPF 用户控件 MouseLeftButtonDown 根本没有被控件触发 我添加了事件处理程序并尝试如下 我想它是在其他地方处理的 如何调试并找到它在哪里得到处理 任何帮助都值得赞赏 pro
  • 安装了JDK但没有javap?

    我安装了 JDK 10 0 2 在程序的类文件文件夹中打开 cmd 然后尝试命令 javap Simulation class 我收到错误消息 未找到命令 javap 我做错了什么 你必须有你的 JAVA HOME bin目录添加到系统PA
  • Firebase Admin SDK 是否执行任何缓存?

    我最近一直在使用带有云功能的Firebase 这个问题突然出现在我的脑海中 如果在我的云函数中 使用 Firebase Admin SDK 在单个函数调用中对同一文档执行多次读取 它会算作数据库中的多次读取还是会缓存数据 Example a
  • 在一个项目中混合 Web Api 和 ASP.Net MVC 页面

    如何在一个项目中混合 Web API 和 ASP Net MVC 页面 例如 我有模型用户 我希望在同一个项目中 有一个 ApiController 可以响应所有用于管理用户实体的 HTTP 动词 同时有一个 Controller 可以根据
  • Eclipse 中有效 HTML5 属性的警告

    我使用 Eclipse 并编写包含 HTML5 内容的 jsp 文件 所以我有例如这一行 div class test 在 Eclipse 中我收到警告 Undefined attribute name data role 需要做什么才能使
  • 如何将我的 nib 文件的所有者设置为另一个 nib 文件中的对象?

    我是 Cocoa 新手 无法将我的 nib 文件拆分为多个 nib 文件 My MainMenu nib包含一个Tracker Controller对象 它是一个子类NSObject 它有一个出口Show Tracker我的主菜单中的菜单项
  • 在 Ruby 中解析文本

    我正在编写一个用于导入 SketchUp 组件信息的脚本 他们的帮助页面上有一位非常乐于助人的人 帮助我创建了一个可用于 编辑 的逐行文本文件的文件 现在我准备将其提升到一个新的水平 直接从 FreePCB 创建的原始文件导入 我希望使用的