ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1428|回复: 36

[求助] txt文件指定内容提取

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-27 14:41 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 松野 于 2024-6-27 14:43 编辑

提取:网元名称、柜号、框号、槽号、接入方向、维护链路工作模式共6个字段到excel;平时有处理过json格式,html格式,xml格式,像这种txt没处理过,看似没有特别有规则但是又有一定的规则,感觉有一定难度,对正则表达式不熟,但是感觉用正则也有一定难度,希望代码越简洁越好,对了,补充说明下,这种文件可能有多个,希望多个导入一次性处理,请高手帮忙。

样例数据.rar

11.5 KB, 下载次数: 45

TA的精华主题

TA的得分主题

发表于 2024-6-27 15:08 | 显示全部楼层
不熟悉正则,如果文本文件的格式都是这样的,是有规律的。

是否可以考虑:
读入文本文件的全部内容,
用“---    END”分割到数组A,
数组A中的每个成员按照换行符分割到数组B,
在数组B中循环找开头是“网元”的成员,按照“:”分割到数组C,数组C的成员(1)就是要提取的“福州仓山新南站北落客平台F18-HSM”。

在数组B中循环找开头是“柜号”的行,从这行开始向下寻找数B的每个成员,开头是“0”的行,按照空格分割到数组D,则数组D就是样例中的一行数据。

看着资料盲写的,大体是这样的思路。

TA的精华主题

TA的得分主题

发表于 2024-6-27 15:50 | 显示全部楼层
当前提供的txt,总共676条:
2024-06-27_154840.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 16:03 | 显示全部楼层
边缘码农 发表于 2024-6-27 15:08
不熟悉正则,如果文本文件的格式都是这样的,是有规律的。

是否可以考虑:

似乎有规律

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 16:06 | 显示全部楼层
飞天篮球猪 发表于 2024-6-27 15:50
当前提供的txt,总共676条:

awk没用过,不熟悉,不过看起来似乎非常简练。

TA的精华主题

TA的得分主题

发表于 2024-6-27 16:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
松野 发表于 2024-6-27 16:06
awk没用过,不熟悉,不过看起来似乎非常简练。

打扰了,这个是润乾的集算器,有兴趣可以去了解一下,免费开源的。
有独立的程序,也可用于EXCEL的公式栏和VBA。

TA的精华主题

TA的得分主题

发表于 2024-6-27 16:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用excel打开,代码循环就更简单了啊

TA的精华主题

TA的得分主题

发表于 2024-6-27 16:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我发现里面的中文读出来是乱码

TA的精华主题

TA的得分主题

发表于 2024-6-27 16:55 | 显示全部楼层
试试这个,看看是不是你想要的,文件放在同一目录下
  1. Sub t()
  2.     Dim fs, f, pa, m%, arr, brr, i%, j%, r%, c%, wy, r_1%, r_end%, t
  3.     pa = ThisWorkbook.Path & "/系统查询结果.txt"
  4.     Set fs = Workbooks.Open(pa)
  5.     m = [a1048576].End(xlUp).Row
  6.     For i = m To 1 Step -1
  7.         If VarType(Range("a" & i)) = 10 Then
  8.             Rows(i).Delete shift:=xlUp
  9.         ElseIf Range("a" & i) = "" Then
  10.             Rows(i).Delete shift:=xlUp
  11.         End If
  12.     Next i
  13.     Application.DisplayAlerts = False
  14.     arr = ActiveSheet.Range("a1:a" & m)
  15.     ReDim brr(1 To 10000, 1 To 6)
  16.     fs.Save
  17.     fs.Close
  18.     Set fs = Nothing
  19.     r = 1
  20.     For i = 1 To UBound(arr)
  21.         If arr(i, 1) <> "" Then
  22.             k = arr(i, 1)
  23.             If InStr(k, "网元") Then
  24.                 wy = Split(k, " : ")(1)
  25.             ElseIf InStr(k, "柜号") Then
  26.                 r_1 = i + 1
  27.             ElseIf InStr(k, "结果个数") Then
  28.                 r_end = i - 1
  29.                 For j = r_1 To r_end
  30.                     brr(r, 1) = wy
  31.                     t = Split(arr(j, 1), " ")
  32.                     c = 2
  33.                     For n = 0 To UBound(t)
  34.                         If t(n) <> "" Then
  35.                             brr(r, c) = t(n): c = c + 1
  36.                         End If
  37.                     Next n
  38.                     r = r + 1
  39.                 Next j
  40.             End If
  41.             
  42.         End If
  43.     Next i
  44.     [a2].Resize(UBound(brr), 6) = brr
  45.     Application.DisplayAlerts = True
  46. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-27 17:02 | 显示全部楼层
文件编码不对,只能将TXT文件先导入Excel文件,再处理
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 23:50 , Processed in 0.051651 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表