Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 宏或VB在CSV导入ms access后清理数据_Vba_Ms Access_Macros - Fatal编程技术网

Vba 宏或VB在CSV导入ms access后清理数据

Vba 宏或VB在CSV导入ms access后清理数据,vba,ms-access,macros,Vba,Ms Access,Macros,目前,我每天提取1个csv文件,然后通过excel宏运行它来清理数据。清理后,我将其导入到ms access中的表中(我在数据库中只有一个表) csv数据有7列。。。跟踪编号(;和端口代码),后跟包裹信息和时间戳 ColA必须只包含跟踪编号,colB必须包含端口代码。问题是数据文件中的行中端口代码位于跟踪编号之前。在这里,我的宏可以方便地进行拆分,并将正确的数据放在正确的列中 Data sample: <br> <h1>colA<h1/><br>

目前,我每天提取1个csv文件,然后通过excel宏运行它来清理数据。清理后,我将其导入到ms access中的表中(我在数据库中只有一个表)

csv数据有7列。。。跟踪编号(;和端口代码),后跟包裹信息和时间戳

ColA必须只包含跟踪编号,colB必须包含端口代码。问题是数据文件中的行中端口代码位于跟踪编号之前。在这里,我的宏可以方便地进行拆分,并将正确的数据放在正确的列中

Data sample: <br>
<h1>colA<h1/><br>
TN123456789;3-CTC-A1T <br>
TN987654321;3-TPO-B2 <br>
TN111122222;N-BKK-A1 <br>
N-BKK-B1;TN222211111 <br>
S-KKC-C1T;TN33333333

Result:<br>
<h1>colA<h1/><br>
TN123456789<br>
TN987654321<br>
TN111122222<br>
TN222211111<br>
TN33333333<br>

<h1>colB<h1/><br>
3-CTC-A1T<br>
3-TPO-B2<br>
N-BKK-A1<br>
N-BKK-B1<br>
S-KKC-C1T<br>
数据样本:
可乐
TN123456789;3-CTC-A1T
TN987654321;3-TPO-B2
TN111122222;N-BKK-A1
N-BKK-B1;tn221111
S-KKC-C1T;TN33333 结果:
可乐
TN123456789
TN987654321
TN111122222
tn221111
TN33333
感冒
3-CTC-A1T
3-TPO-B2
N-BKK-A1
N-BKK-B1
S-KKC-C1T
问题:
是否可以导入csv数据文件,然后让access在将数据附加到我的表之前为我清理数据,而不是先通过excel进行清理,然后再通过access进行导入? 如果是,我该如何着手进行

这里是我的+1解决方案; -读取文件 -将文件清理到内存中 -准备导入数据的输出文件

Sub demo_cleanbuffer()
'
'=======================================================================================
' Procedure : demo_cleanbuffer (Sub)
' Module    : Module1 (Module)
' Project   : VBAProject
' Author    : misterneo
' Date      : 12/02/2016
' Comments  : **MANDATORY**
' Unit Test : 12/02/2016 10:10 | Description [OK]
' Arg./i    :
'           - [NO PARAM]
'           -
'           -
' Arg./o    : ()
'
'Changes--------------------------------------------------------------------------------
'Date               Programmer                      Change
'12/02/2016         GRT / GAZ               Initiate
'
'=======================================================================================
'

Dim filen As Byte
Dim arrStr() As Variant
Dim arrReturn() As String
Dim buffer As String

'Note : String to erase
arrStr = Array("<br>", "<h1>", "<h1/>", "colA")
'Note : read file

Open "C:\tmp.txt" For Binary Access Read As #1
    buffer = Space(LOF(1))
    Get #1, , buffer
Close #1

'Note : erase unwanted string
For i = LBound(arrStr) To UBound(arrStr)
    buffer = Replace(buffer, arrStr(i), "")
Next i

'Note : store each buffer line into array
arrReturn = Split(buffer, vbCrLf)

'Note : write data into text file
Open "C:\tmpo.txt" For Output As #1
    For i = LBound(arrReturn) To UBound(arrReturn)
        If Not Len(arrReturn(i)) = 0 Then Print #1, Trim(arrReturn(i))
    Next i
Close #1

End Sub
Sub demo_cleanbuffer()
'
'=======================================================================================
'程序:demo_cleanbuffer(Sub)
'模块:模块1(模块)
'项目:VBA项目
作者:米塞尼奥
“日期:2016年2月12日
'备注:**必填项**
'单元测试:12/02/2016 10:10 |说明[确定]
'Arg./i:
'-[无参数]
'           -
'           -
'Arg./o:()
'
"变化",--------------------------------------------------------------------------------
'日期程序员更改
'12/02/2016 GRT/GAZ启动
'
'=======================================================================================
'
作为字节的Dim文件
Dim arrStr()作为变量
返回()作为字符串
将缓冲区设置为字符串
'注意:要删除的字符串
arrStr=Array(“
”、“”、“”、“”、“”和“colA”) '注意:读取文件 打开“C:\tmp.txt”进行二进制访问,读取为#1 缓冲区=空间(LOF(1)) 获取#1,缓冲区 关闭#1 '注意:删除不需要的字符串 对于i=LBound(arrStr)到UBound(arrStr) 缓冲区=替换(缓冲区,arrStr(i),“”) 接下来我 '注意:将每个缓冲行存储到数组中 arrrurn=Split(缓冲区,vbCrLf) '注意:将数据写入文本文件 打开“C:\tmpo.txt”将输出为#1 对于i=LBound(arrrurn)到UBound(arrrurn) 如果不是Len(arrrurnal(i))=0,则打印#1,修剪(arrrurnal(i)) 接下来我 关闭#1 端接头