我需要编辑一个文本文件,即使用宏添加和更新数据。我有一个包含数千条记录的文本文件,一个单独的Excel工作表,它提供了文本文件中数据的映射。例如,文本文件中的记录如下所示:
ABCDNew Delhi India
映射excel表格如下:
Name 4
City 10
Country 10
这意味着记录中的前四个字符给出了名称,接下来的10个给出了城市,接下来的10个给了特定人的国家,依此类推。现在,我必须编辑特定名称的记录(一个或两个字段)并将其保存在同一文件中。我还以上面指定的格式添加了一条新记录,然后保存文件。
excel表只提供文本文件中字段的映射。它只告诉字段长度。正如你在我的问题中看到的那样,文本是连续的,没有任何分隔符。因此excel表用于标识文本文件中的variuos字段。样本记录如下:
ABCDDelhiIndia1100019876543210
,映射是:
姓名4 城市5 国家5 PinCode 6 PhnNo 10
映射对于文件中的所有记录都是相同的。它只是提供了如何从文件中读取记录的方法。
关于如何以最简单的方式做到这一点的任何想法?
答案 0 :(得分:2)
您可以在姓名,城市和国家之间设置一些分隔符,例如:ABCD:新德里:印度。 有分隔符可以让您分隔名称,城市和国家。现在您可以轻松确定每个字符串的长度。现在根据您的要求,您可以轻松编辑数据并写入文件。您可以参考以下代码以供参考: 文本文件:exceltest abcd:新德里:印度 测试: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”。
答案 1 :(得分:0)
您所描述的是固定宽度数据。这很简单,可以使用导入对话框中的“固定宽度”选项将数据导入excel中的文本文件。然后,您可以为每个字段选择开始和结束。更棘手的部分是将其导出为相同的格式。我知道实现这一目标的唯一方法是通过VBA。虽然它似乎是直接的例行程序,但它可能已被写了很多次。