首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >宏从txt文件中提取不正确的数据

宏从txt文件中提取不正确的数据
EN

Stack Overflow用户
提问于 2019-09-14 05:37:34
回答 2查看 106关注 0票数 0

宏从txt文件中提取不正确的数据。我有一个代码循环通过数百个文件,提取开始时间和诊断时间的时间戳,并将它们粘贴到A和B列中。开始时间的时间戳提取正确,但诊断的时间戳不正确。相反,txt文件中的第一行文本被拉出并粘贴到列B中。输入txt日志文件的示例如下所示,txt日志文件中还有数百个其他时间戳,但我关心的两个时间戳是start和irp诊断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      +version=LogbookPlus 1.7.23
      +site=
      +lastedit=2019-08-31 17:19:31.289
      +description=SRC - LSA-0251 error
      +number=1282
      +so=51657136
      +toolowner=
      +init=2019-08-30 08:40:38.360
      +start=2019-08-30 08:25
      +end=2019-08-30 09:45
      +down=Unscheduled
      +account=Source
      +rooterror=LSA-0251
      +subsystem=ILP-DC-PQ
      +assy=Dose & power performance
      +work=2019-08-30|08:39| [IRP] Diagnose
      +work=2019-08-30|08:41| Start streaming
      +work=2019-08-30|09:03| Conditioning
      +work=2019-08-30|09:04| Standby

以下是我的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub FindTimeStamps()

Dim TextFile As Integer
Dim FilePath As String
Dim FileContent As String
Dim MyFolder As String, MyFile As String

'Open Diaglouge box prompting user to choose folder path

With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Show
    MyFolder = .SelectedItems(1)
    Err.Clear
End With

'Create a new object for files in that folder and apply for/loop

Dim objFSO As Object
Dim objFolder As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.getFolder(MyFolder)
Dim fls As Object
Dim i As Integer
i = 1
For Each fls In objFolder.Files
'File Path of Text File

MyFile = MyFolder & "\" & fls.Name

'Determine the next file number available for use by the Fileopen function

TextFile = FreeFile
'open the text file

Debug.Print CurDir
Open MyFile For Input As #1

'Store file content inside a variable

 Do Until EOF(1)
    Line Input #1, textline
    Text = Text & textline
Loop

Close #1
 'Find Time Stamp Data from txt file
  Dtime = Diagnose
  Diagnose = InStr(1, Text, Dtime)
  dt = Mid(Text, Diagnose + 1, 17)
  Sttime = InStr(Text, "+start=")

'Paste obtained Time Stamp into excel Cells

Range("A" & i + 1).Value = Mid(Text, Sttime + 7, 16)
Range("B" & i + 1).Value = dt
i = i + 1

Text = ""
Next
End Sub

如果我不对诊断变量进行硬编码,而是执行用户输入,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Find = InputBox("which word")
Open Text For Input As #1
Do While Not EOF(1)
   Input #1, Text
   If InStr(1, Text, Find) > 0 Then
      idx = InStr(1, Text, "=")
      dt = Mid(Text, idx + 1, 17)
   Exit Do
End If
Loop

这是由另一个用户建议的,代码工作并提取正确的时间戳。这样做的缺点是,我必须为文件夹中的每个文件输入诊断,这是不理想的。我还在学习VBA,所以我不仅在寻找解决方案,还在寻找硬编码变量不能正确提取数据的原因。谢谢您的帮助,非常感谢。

这是我在excel中得到的宏的输出,当我使用硬编码变量进行诊断时,在列b中没有用于诊断的时间戳它只是出于我不明白的原因提取输入txt文件的第一行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          Column A          Column B
          8/28/2019 14:29   version=LogbookPl
          8/29/2019 5:38    version=LogbookPl
          8/30/2019 8:25    version=LogbookPl
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-15 04:12:29

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub FindTimeStamps()

Dim TextFile As Integer
Dim FilePath As String
Dim FileContent As String
Dim MyFolder As String, MyFile As String

'Open Diaglouge box prompting user to choose folder path

With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Show
    MyFolder = .SelectedItems(1)
    Err.Clear
End With

'Create a new object for files in that folder and apply for/loop

Dim objFSO As Object
Dim objFolder As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.getFolder(MyFolder)
Dim fls As Object
Dim i As Integer
i = 1
For Each fls In objFolder.Files
'File Path of Text File

MyFile = MyFolder & "\" & fls.Name

'Determine the next file number available for use by the Fileopen function

TextFile = FreeFile
'open the text file

Debug.Print CurDir
Open MyFile For Input As #1

'Store file content inside a variable

Do Until EOF(1)
    Input #1, textline
    Text = textline
    If (InStr(Text, "+start=") <> 0) Then
        Sttime = InStr(Text, "+start=")
        Range("A" & i + 1).Value2 = Mid(Text, Sttime + 7, 16)
        i = i + 1
    End If
    If (InStr(Text, "| [IRP] Diagnose") <> 0) Then
        dt = InStr(Text, "| [IRP] Diagnose")
        Range("B" & i).Value2 = Mid(Text, dt - 16, 10) & " " & Mid(Text, dt - 5, 5)
    End If
    If (Range("B" & i).Value2 = "") And (Range("A" & i).Value2 <> "") Then _
                                        Range("B" & i).Value2 = "No Diagnose"
Loop
Close #1

Next
End Sub

有了你发给我的文件,它就能工作了。请查收

票数 1
EN

Stack Overflow用户

发布于 2019-09-14 07:44:12

试试这个吧。

我检查了几个文件中的一个,它就可以工作了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub FindTimeStamps()

Dim TextFile As Integer
Dim FilePath As String
Dim FileContent As String
Dim MyFolder As String, MyFile As String

'Open Diaglouge box prompting user to choose folder path

With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Show
    MyFolder = .SelectedItems(1)
    Err.Clear
End With

'Create a new object for files in that folder and apply for/loop

Dim objFSO As Object
Dim objFolder As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.getFolder(MyFolder)
Dim fls As Object
Dim i As Integer
i = 1
For Each fls In objFolder.Files
'File Path of Text File

MyFile = MyFolder & "\" & fls.Name

'Determine the next file number available for use by the Fileopen function

TextFile = FreeFile
'open the text file

Debug.Print CurDir
Open MyFile For Input As #1

'Store file content inside a variable

Do Until EOF(1)
    Input #1, textline
    Text = textline
    If (InStr(Text, "+start=") <> 0) Then
        Sttime = InStr(Text, "+start=")
        Range("A" & i + 1).Value = Mid(Text, Sttime + 7, 16)
    End If
    If (InStr(Text, "Diagnose") <> 0) Then
        dt = InStr(Text, "Diagnose")
        Range("B" & i + 1).Value = Mid(Text, dt - 24, 10) & " " & Mid(Text, dt - 13, 5)
        i = i + 1
    End If
Loop

Close #1

Next
End Sub

希望能有所帮助

使用您提供的输入:(我只是重复一遍)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+version=LogbookPlus 1.7.23
 +start=2019-08-30 08:25
 +work=2019-08-30|08:41| [IRP] Diagnose
 +work=2019-09-08|14:32| DAS power on
 +work=2019-09-08|14:33| linux boot
 +version=LogbookPlus 1.7.23
 +start=2019-08-30 08:25
 +work=2019-08-30|08:41| [IRP] Diagnose
 +work=2019-09-08|14:32| DAS power on
 +work=2019-09-08|14:33| linux boot
 +version=LogbookPlus 1.7.23
 +start=2019-08-30 08:25
 +work=2019-08-30|08:41| [IRP] Diagnose
 +work=2019-09-08|14:32| DAS power on
 +work=2019-09-08|14:33| linux boot
 +version=LogbookPlus 1.7.23
 +start=2019-08-30 08:25
 +work=2019-08-30|08:41| [IRP] Diagnose
 +work=2019-09-08|14:32| DAS power on
 +work=2019-09-08|14:33| linux boot

我得到了:

This log

这就是你要找的东西吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57932765

复制
相关文章
python操作txt文件中数据教程[2]-python提取txt文件中的行列元素
原始txt文件 程序实现后结果-将txt中元素提取并保存在csv中 程序实现 import csv filename = "./test/test.txt" Sum_log_file = "./te
演化计算与人工智能
2020/08/14
2.9K0
python操作txt文件中数据教程[2]-python提取txt文件中的行列元素
python从txt文件读取数据
  (作为一个python初学者,记录一点学习期间的笔记,方便日后查阅,若有错误或者更加便捷的方法,望指出!)
py3study
2020/01/19
3.9K0
python从txt文件读取数据
python操作txt文件中数据教程[1]-使用python读写txt文件
原始txt文件 程序实现后结果 程序实现 filename = './test/test.txt' contents = [] DNA_sequence = [] # 打开文本并将所有内容存入con
演化计算与人工智能
2020/08/14
2.4K0
python 将读取的数据写入txt文件_c中怎样将数据写入txt文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
6.5K0
python读取txt文件中的json数据
txt文本文件能存储各式各样数据,结构化的二维表、半结构化的json,非结构化的纯文本。 存储在excel、csv文件中的二维表,都是可以直接存储在txt文件中的。
全栈程序员站长
2022/08/30
7.2K0
python读取txt文件中的json数据
python 操作 txt 文件中数据教程[4]-python 去掉 txt 文件行尾换行
python 操作 txt 文件中数据教程[1]-使用 python 读写 txt 文件[1]
演化计算与人工智能
2020/08/14
2.7K0
如何使用python读取txt文件中的数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139037.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
6.8K0
从ceph对象中提取RBD中的指定文件
之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文件很小,可能在fs层进行了合并,应该很难找到对应关系,最近看到小胖有提出这个问题,那么就再次尝试了,现在就是把这个实现方法记录下来 这个提取的作用个人觉得最大的好处就是一个rbd设备,在文件系统层被破坏以后,还能够从rbd提取出文件,我们知道很多情况下设备的文件系统一旦破坏,无法挂载,数据也就无法读取,而如果能从rbd中提取出文件,这就是保证了即使文件系统损坏的情况下,数据至少不丢失
用户2772802
2018/08/06
4.9K0
c# 读取 txt 文件中数据(int)
今天在学图的算法做测试是,需要读取文本文件中的点坐标,本来很简单的事情,折腾了半天,记录一下找到的一种简单粗暴的解决方法,以便以后查看。
用户2434869
2018/09/12
6.1K0
使用Python从PDF文件中提取数据
数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据。然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了解如何从pdf文件中提取数据,并将数据转换为诸如“csv”之类的格式,以便用于分析或构建模型。
HuangWeiAI
2020/07/27
4K0
使用Python从PDF文件中提取数据
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
[1]python操作txt文件中数据教程[1]-使用python读写txt文件: https://blog.csdn.net/u013555719/article/details/84553722
演化计算与人工智能
2020/08/14
1.2K0
python读取txt文件中的数组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139543.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
4K0
如何从 Debian 系统中的 DEB 包中提取文件?
DEB 包是 Debian 系统中常见的软件包格式,用于安装和管理软件。有时候,您可能需要从 DEB 包中提取特定的文件,以便查看其内容、修改或进行其他操作。本文将详细介绍如何从 Debian 系统中的 DEB 包中提取文件,并提供相应的示例。
网络技术联盟站
2023/06/08
3.6K0
如何从 Debian 系统中的 DEB 包中提取文件?
Python中的requirements.txt文件
在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号。这个文件有点类似与Rails的Gemfile。其作用是用来在另一台PC上重新构建项目所需要的运行环境依赖。第一步我觉得就是看一眼readme吧~而后看一眼requirements.txt。说了很多遍了,python从某种意义上来讲就是活的库。
云深无际
2021/04/14
9.1K0
Python中的requirements.txt文件
MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据
 最近做的项目,有个需求(从Elastic Search取数据,业务运算后),每次要向MySQL插入1300万条数据左右。最初用MySQL的executemany()一次插入10000条数据,统计的时间如下:
NaughtyCat
2020/10/09
7.9K0
MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据
Python将数据写入txt文件_python将内容写入txt文件
readlines() 会把每一行的数据作为一个元素放在列表中返回,读取所有行的数据
全栈程序员站长
2022/11/11
12.5K0
将多个txt文件中的内容写在一个txt中的方法
import os filename='./train_data/img_' for i in range(1,19736): newfile=filename+str(i)+'.txt' if os.path.exists(newfile): read= open(newfile, 'r') for line in read: writ = open('recode.txt', 'a') writ.write(
陶陶name
2022/05/13
3.4K0
数据从txt文本导入python
def file2matrix(filename):     fr = open(filename)     numberOfLines = len(fr.readlines())         #get the number of lines in the file     returnMat = zeros((numberOfLines,3))        #prepare matrix to return     classLabelVector = []                       #prepare labels return        fr = open(filename)     index = 0     for line in fr.readlines():         line = line.strip()         listFromLine = line.split('\t')         returnMat[index,:] = listFromLine[0:3]         classLabelVector.append(int(listFromLine[-1]))  此句报错         index += 1     return returnMat,classLabelVector
py3study
2020/01/06
2.1K0
数据从txt文本导入python
读取文件中的所有图片的路径,保存到txt文件中。
import sys import os.path if __name__ == "__main__": f = open('dataset.txt', 'w') # 文件名,文件下还有多个类别的文件。 BASE_PATH="JAFFE" SEPARATOR=";" # 绝对路径地址 pth = "/Users/liupeng/Desktop/my/faceER/DataSet/" for dirname, dirnames, filename
MachineLP
2022/05/09
6.9K0
Python骚操作,提取pdf文件中的表格数据!
在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取。那么如何才能高效提取出pdf文件中的表格数据呢?
诸葛青云
2019/03/31
7.4K0
Python骚操作,提取pdf文件中的表格数据!

相似问题

从.txt文件中提取数据

61

从txt文件中提取数据

45

从txt文件中提取数据

11

从txt文件中提取数据

22

从txt文件中提取数据?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文