【发布时间】:2014-05-27 16:49:15
【问题描述】:
我在 VBA 中构建了一个简单的网络爬虫,它从 Google 专利中提取一个表格,并将内部 HTML 存储在一个 .txt 文件(名称类似于 1234567.txt)中,用于大约 23,000 项专利。现在我要分析每个文件的内容。为此,我希望将 txt 文件导入 VBA,以便我可以进行一些字符串搜索,但这似乎非常困难。 我阅读了大约 20 种将 .txt 文件导入 VBA 的解决方案,但没有一个适用于我的文件,如下所示:
US6824791 B2 ' There is a shift + Enter here
<TD class="patent-data-table-td citation-patent"><A href="/patents/US7767249">US7767249</A></TD>
<TD class="patent-data-table-td patent-date-value">Jul 25, 2005</TD>
<TD class="patent-data-table-td patent-date-value">Aug 3, 2010</TD>
<TD class="patent-data-table-td ">Hewlett-Packard Development Company, L.P.</TD>
<TD class="patent-data-table-td ">Preparation of nanoparticles</TD></TR>
<TR>
<TD class="patent-data-table-td citation-patent"><A href="/patents/US7935853">US7935853</A><SPAN class=patent-tooltip-anchor aria-label="Cited by examiner" data-tooltip-text="Cited by examiner" data-tooltip="Cited by examiner" a="null"> *</SPAN></TD>
<TD class="patent-data-table-td patent-date-value">Oct 8, 2009</TD>
<TD class="patent-data-table-td patent-date-value">May 3, 2011</TD>
<TD class="patent-data-table-td ">Bobelium S.L.</TD>
<TD class="patent-data-table-td ">Micronized composition of a 2,4-disubstituted phenol derivative</TD></TR>
<TR>
<TD class="patent-data-table-td citation-patent"><A href="/patents/US8524829">US8524829</A></TD>
<TD class="patent-data-table-td patent-date-value">Jun 17, 2008</TD>
<TD class="patent-data-table-td patent-date-value">Sep 3, 2013</TD>
<TD class="patent-data-table-td ">Brown University Research Foundation</TD>
<TD class="patent-data-table-td ">Methods for micronization of hydrophobic drugs</TD></TR>
<TR>
<TD class="patent-data-table-td citation-patent"><A href="/patents/EP2422804A1?cl=en">EP2422804A1</A></TD>
<TD class="patent-data-table-td patent-date-value">Jun 16, 2005</TD>
<TD class="patent-data-table-td patent-date-value">Feb 29, 2012</TD>
<TD class="patent-data-table-td ">Amano Enzyme USA., Ltd.</TD>
<TD class="patent-data-table-td ">Controlled release formulations of enzymes, microorganisms, and antibodies with mucoadhesive polymers</TD></TR></TBODY></TABLE>
' There is a shift + Enter here
因此,尽管文件结构整齐且重复,但将它们作为单个字符串导入似乎非常困难。我基本上想遍历文件,提取专利号和提到的两个日期(使用Mid 和InStr)并将它们放在三个不同的列中。这是我认为最好的方法,但我渴望听到更明智的建议!
知道每个 .txt 文件具有不同的长度(行数)可能是相关的,但我可以以 99.9% 的确定性估计确切的行数(1 (title) + 6 * total number of citations (which I know) - 1 (last <TR> is missing)
提前致谢
西蒙
编辑:我尝试过的一些例子。此代码取自在线资源。我不太确定它们应该如何工作,很可能是我错误地应用了它们。
`Sub Text2Excel_Click()
Dim sourcestring as String
sourcestring = GetText("C\users\...\test.txt")
sourcestring = OpenTextFileToString("C\users\...\test.txt")
Function GetText(sFile As String) As String
Dim sText As String
Dim nSourceFile As Integer
''Close any open text files
Close
''Get the number of the next free text file
nSourceFile = FreeFile
''Write the entire file to sText
Open sFile For Input As #nSourceFile
sText = Input$(LOF(1), 1)
Close
GetText = sText
End Function
Function OpenTextFileToString(ByVal strFile As String) As String
' RB Smissaert - Author
Dim hFile As Long
hFile = FreeFile
Open strFile For Input As #hFile
OpenTextFileToString = Input$(LOF(hFile), hFile)
Close #hFile
End Function
我还尝试了以下 suggestion: 但这给了我运行时错误 424“需要对象”。
【问题讨论】:
-
我可以只取文本(在开始添加
<TABLE>和<TBODY>开始标签后 - 可能只是因为您只发布了一小部分数据而丢失),将其另存为.html 文件,然后使用 Excel 中的文件/打开将其导入标准电子表格。这不适合你吗? -
我展示了我拥有的所有数据。
和 在文件的收集中已被删除。不知道我会需要它们,所以我没有它们。保存为 html 并在 excel 中打开可能是可能的,但我不知道如何为 > 20.000 个文本文件执行此操作。为每个文件手动执行似乎不是一个明智的选择...
所以你有很多 HTML 表格片段要从中提取数据。我仍然不完全确定您遇到了什么问题:该过程的哪一部分不起作用(实际上是打开文件,遍历行,查找数据)?您尝试过哪些 VBA 函数,结果如何?我只需要一个允许我将文件读入 vba 的函数。我认为这非常简单,但我似乎没有找到任何可行的解决方案。所以我将我给出的示例存储在 C:\Users\simon\Desktop\test.txt 下,我想将该文件读入 VBA 并将其命名为 sourcestring。所以我尝试了Dim sourcestring As String sourcestring = "C:\Users\simon\Desktop\test.txt" and 100 variants (with EOF and LOF)之类的方法,但没有任何效果。有时我只得到第一行(可能是由于硬中断。通常我得到一个错误23,000 个文件?每个文件有多少引用?我认为您会使用 Open、Line Input 和 Close 读取文件,以便提取所需的字段。您的代码似乎没有提取任何数据。