1

我需要编辑一个文本文件,即使用宏添加和更新数据。我有一个包含数千条记录的文本文件,一个单独的 Excel 表,它给出了文本文件中数据的映射。例如,文本文件中的记录如下所示:

ABCDNew Delhi India

映射excel表如下:

Name    4
City    10
Country 10

这意味着记录中的第一个四个字符给出名字,接下来的 10 个给出城市,接下来的 10 个给出特定人的国家,依此类推。现在,我必须编辑特定名称的记录(一个或两个字段)并将其保存在同一个文件中。我还添加了上述指定格式的新记录,然后保存文件。

excel表只是给出了文本文件中字段的映射。它只告诉字段长度。正如您在我的问题中看到的那样,文本是连续的,没有任何分隔符。因此,Excel 工作表用于识别文本文件中的各种字段。样本记录如下:

ABCD德里印度1100019876543210

映射是:

姓名 4 城市 5 国家 5 PinCode 6 PhnNo 10

文件中所有记录的映射相同。它只是提供了一种如何从文件中读取记录的方法。

关于如何以最简单的方式做到这一点的任何想法?

4

2 回答 2

2

您可以在名称、城市和国家/地区之间设置一些分隔符,例如:ABCD:New Delhi:India。有分隔符可以让你分隔名称、城市和国家。现在您可以轻松确定每个字符串的长度。现在根据您的要求,您可以轻松地编辑数据并写入文件。您可以参考以下代码以供参考:文本文件:exceltest abcd:new delhi:india test:NY:USA

宏代码:

Sub readTextFile()

Dim oFSO As New FileSystemObject

Dim oFS

Dim objFSO As New FileSystemObject

Set myTemp = objFSO.CreateTextFile("C:\Users\Rohit\Desktop\exceltestTemp.txt", True)

Set oFS = oFSO.OpenTextFile("C:\Users\Rohit\Desktop\exceltest.txt")

Do Until oFS.AtEndOfStream

stext = oFS.ReadLine

Dim testarray() As String

testarray = Split(stext, ":")

Dim i As Integer 

i = Len(testarray(0)) 'determine length of each String, here as a sample only length of one string is determined

Cells(4, "a").Value = i 'writing a length to excel sheet, you can write to any location

Cells(1, "a").Value = testarray(0) 'writing contents to excel sheet

Cells(2, "a").Value = testarray(1) 'writing contents to excel sheet

Cells(3, "a").Value = testarray(2) 'writing contents to excel sheet

'Search for the Name

If testarray(0) = "test" Then

testarray(1) = "Mumbai"

End If

myTemp.WriteLine testarray(0) & ":" & testarray(1) & ":" & testarray(2) 'writing to a temp text file

Loop

End Sub

现在根据您的要求,您可以搜索名称并编辑数据并写入文件。然后您可以删除原始文件并将临时文件保存为原始文件。

PS:在 Excel 2007 上试过。您需要添加参考“Microsoft Scripting Runtime”。

于 2013-10-21T08:05:53.800 回答
0

您所描述的是固定宽度的数据。使用导入对话框中的“固定宽度”选项,可以直接将数据作为文本文件导入 excel。然后,您可以选择每个字段的开始和结束。更棘手的部分是将其导出为相同的格式。我知道实现这一目标的唯一方法是通过 VBA。不过,这似乎是一个直接的例行程序,它可能已经写了很多很多次了。

于 2014-04-09T08:35:23.967 回答