Sql 导入以访问TXT数据库,每个记录是否有多行?
我在导入以访问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
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位元素做什么。