导入访问TXT数据库,每条记录有多行?

时间:2017-07-20 16:10:31

标签: sql database ms-access

我无法导入访问以与此类似的方式格式化的TXT文件:

Johnny Doe Nobody        018918651Something else about this guy       556161  001
159159189489405604640       3rd Avenue - Random Street 123 - Alaska
Mary Rose                468486464Something else about this gal       564566  002
194984498446415615648       3rd Avenue - Random Street 456 - Alaska
Johnny Doe Jr.           265262655Something about this dude           556558  003
489446811897188678678       3rd Avenue - Random Street 789 - Alaska

问题:每个人都有不止一条线!我该如何解析这个文件?谢谢!

- 编辑 - 更糟糕的是,有些数据库可能会这样:

Johnny Doe Nobody        018918651Something else about this guy       556161  001
159159189489405604640       3rd Avenue - Random Street 123 - Alaska
Johnny Doe Nobody        018918651Something else about this guy       556161  001
151515456489489494894       3rd Avenue - Random Street 123 - Alaska
Johnny Doe Nobody        018918651Something else about this guy       556161  001
165156161561561615165       3rd Avenue - Random Street 123 - Alaska

我必须把它变成一条记录! :(

2 个答案:

答案 0 :(得分:0)

如果状态是强制性的,请说在这种情况下阿拉斯加或任何其他状态' - '是强制性的,那么我只需逐行读取它,然后添加包含' - '的直接下一行并使用它。

如果该行不包含连字符(' - '),则为新行。

完全取决于基本文件格式的结构。

实施例

Buffer string = Johnny Doe没有人018918651关于这个男士的其他556161 001

如果在那里搜索连字符,则将其添加到缓冲区,如果它包含任何连字符,则读取下一个连字符。如果它没有那么它是一个新的线。处理缓冲行并在循环中再次执行相同操作。

答案 1 :(得分:0)

以下是一些公然被盗的代码:Shivam 这将删除在指定输入文件中找到的每个其他CRLF,并将结果写入指定的输出文件。首先在文本文件上运行此命令,然后将输出文件作为具有固定长度记录的文本文件导入。

Sub CleanFile()
Const ForReading = 1
Const ForWriting = 2
Const TriStateUseDefault = -2
Dim strInput As String
Dim strOutput As String
Dim objFSO As Object
Dim objInput As Object
Dim objOutput As Object
Dim arrLines As Variant
Dim i As Integer

strInput = "C:\temp\in.txt"
strOutput = "C:\temp\out.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objInput = objFSO.OpenTextFile(strInput, ForReading, False, TriStateUseDefault)
arrLines = Split(objInput.ReadAll, vbCrLf)
objInput.Close

Set objOutput = objFSO.OpenTextFile(strOutput, ForWriting, True)

For i = 0 To UBound(arrLines) Step 2
   If i + 1 > UBound(arrLines) Then
      objOutput.WriteLine arrLines(i)
   Else
      objOutput.WriteLine arrLines(i) & " " & arrLines(i + 1)
   End If
Next

objOutput.Close
End Sub