Sql 导入以访问TXT数据库,每个记录是否有多行?

Sql 导入以访问TXT数据库,每个记录是否有多行?,sql,database,ms-access,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

我在导入以访问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

我要把它做成一张唱片(

如果州是强制性的,比如在本例中阿拉斯加或任何其他州,“-”是强制性的,那么我只需逐行阅读,然后添加包含“-”的下一行并使用它

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

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

例如

Buffer string=Johnny Doe Nobody 018918651关于这家伙的其他信息556161 001


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

这里有一些代码被公然窃取: 这将删除指定输入文件中找到的所有其他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

无法使用导入向导。请使用VBA打开文本文件对象,读入每一行,并将数据元素解析为数组。测试每一行的开头字符是否为字母或数字,以确定它是否是记录的延续。但是,所有这些空格都会变得复杂。数据元素是否由制表符或重复空格分隔?是否应使用分隔符tor介于
018918651
某物之间
?除非您希望所有内容都在一个长文本字段中。实际上,如果每个记录都有两行,则甚至不需要进行字母/数字测试。不幸的是,以任何一致性分隔名称部分几乎是不可能的。地址信息可能会在y在连字符上进行二次解析。仔细想想,检查字母/数字更容易。实际上,“018918651”和“Something”是数据库中发生的一些事情的一个例子……因为每个字段都是由字符数固定的,(1-15始终是名称),有时有些字段是不分开的…问题是,有些数据库每个人最多可以有6行!更多信息请参见编辑…让它成为一场噩梦,我对SQL的了解,并没有超出选择的范围…很久以前有人制作了一个解析此文件的程序,但它是java,我没有它…我将如何做到这一点n访问?很好!现在需要处理重复的名称。仍然不知道poster想要对21位元素做什么。