Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

TXT文本怎样批量导入?

黄龙  发表于:2014-04-16 15:12:29  
复制

这样多种题型的TXT文本怎样批量导入???求解....

选择题

1、鸦片战争是哪一年开始的?   ()
A、1840年  B、1854年  C、1789年
判断题
2、鸦片战争开始于1840年? 

 

Top
chinasa 发表于:2014-04-16 15:46:20

找出规律,然后逐行写入。给你一段代码供参考。

说明:我这段代码处理的是以"00:”开头,并以"99:”结尾。其它没一行都是两位数字加冒号开头,每行由多个冒号把多个字段分隔开,所以我是判断冒号的位置,然后读入冒号之间的内容。你可以考虑顿号,或者其它规律。

 

Dim edict
Close #1
Open Me.文本0 For Input As #1    ' 打开文件。

Do While Not EOF(1)    ' 循环至文件尾。
    Line Input #1, edict    ' 读入一行数据并将其赋予某变量。
If Mid(edict, 1, 3) = "99:" Then
MsgBox "处理完毕"
Close #1
Exit Do
End If
    
 

'50记录
If Mid(edict, 1, 2) = "50" Then
len50 = Len(edict)
wz50_1 = InStr(1, edict, ":", 1)
wz50_2 = InStr(wz50_1 + 1, edict, ":", 1)
wz50_3 = InStr(wz50_2 + 1, edict, ":", 1)
wz50_4 = InStr(wz50_3 + 1, edict, ":", 1)
wz50_5 = InStr(wz50_4 + 1, edict, ":", 1)
wz50_6 = InStr(wz50_5 + 1, edict, ":", 1)
wz50_7 = InStr(wz50_6 + 1, edict, ":", 1)
wz50_8 = InStr(wz50_7 + 1, edict, ":", 1)
wz50_9 = InStr(wz50_8 + 1, edict, ":", 1)
wz50_10 = InStr(wz50_9 + 1, edict, ":", 1)
wz50_11 = InStr(wz50_10 + 1, edict, ":", 1)
wz50_12 = InStr(wz50_11 + 1, edict, ":", 1)
wz50_13 = InStr(wz50_12 + 1, edict, ":", 1)
wz50_14 = InStr(wz50_13 + 1, edict, ":", 1)
wz50_15 = InStr(wz50_14 + 1, edict, ":", 1)
wz50_16 = InStr(wz50_15 + 1, edict, ":", 1)
xh = Mid(edict, wz50_1 + 1, wz50_2 - wz50_1 - 1)
xx = Mid(edict, wz50_2 + 1, wz50_3 - wz50_2 - 1)
fel = Mid(edict, wz50_3 + 1, wz50_4 - wz50_3 - 1)
op = Mid(edict, wz50_16 + 1, len50 - wz50_16 - 1)

'51记录
Line Input #1, edict    ' 读入一行数据并将其赋予某变量。
If Mid(edict, 1, 2) <> "51" Then
MsgBox "51格式错误" & edict
Exit Sub
End If
len51 = Len(edict)
wz51_1 = InStr(1, edict, ":", 1)
wz51_2 = InStr(wz51_1 + 1, edict, ":", 1)
If wz51_2 = 0 Then
tdh = Mid(edict, wz51_1 + 1, len51 - wz51_1 - 1)
End If
If wz51_2 <> 0 Then
tdh = Mid(edict, wz51_1 + 1, wz51_2 - wz51_1 - 1)
End If

'52记录
Line Input #1, edict    ' 读入一行数据并将其赋予某变量。
If Mid(edict, 1, 2) <> "52" Then
MsgBox "52格式错误" & edict
Exit Sub
End If
len52 = Len(edict)
wz52_1 = InStr(1, edict, ":", 1)
wz52_2 = InStr(wz52_1 + 1, edict, ":", 1)
wz52_3 = InStr(wz52_2 + 1, edict, ":", 1)
wz52_4 = InStr(wz52_3 + 1, edict, ":", 1)
wz52_5 = InStr(wz52_4 + 1, edict, ":", 1)
'zhgdm = Mid(edict, wz52_1 + 1, wz52_2 - wz52_1 - 1)
If len52 = wz52_3 + 6 Then
xhgdm = Mid(edict, wz52_3 + 1, 5)
End If
If len52 <> wz52_3 + 6 Then
xhgdm = Mid(edict, wz52_3 + 1, wz52_4 - wz52_3 - 1)
End If
'jhddm = Mid(edict, wz52_5 + 1, len52 - wz52_5 - 1)
zhgdm = "XXXXX"
'xhgdm = "XXXXX"
jhddm = "XXXXX"


 DoCmd.RunSQL "INSERT INTO 船图 ( 提单号,箱号,箱型,FEL,箱主,装货港代码,卸货港代码,交货地代码 ) values(" & Chr(34) & tdh & Chr(34) & "," & Chr(34) & xh & Chr(34) & "," & Chr(34) & xx & Chr(34) & "," & Chr(34) & fel & Chr(34) & "," & Chr(34) & op & Chr(34) & "," & Chr(34) & zhgdm & Chr(34) & "," & Chr(34) & xhgdm & Chr(34) & "," & Chr(34) & jhddm & Chr(34) & ")"
End If

Loop

 



煮江品茶 发表于:2014-04-16 16:28:29

用正则表达式读取即可:

1、表示一题(包含答案)的正则表达式为:^\d+、.+

其中:

^表示段落的开始

\d+表示一个以上的阿拉伯字母

、表示跟在数字后的顿号

.+表示后面乱七八糟的所有东西



2、写一个自定义函数

Function MatchArr(ByVal s As String, ByVal match_str As String) As Variant
    '引用:Microsoft VBScript Regular Expressions 5.5
    '功能:返回与正则表达式中捕获的子字符串
    '参数:s--字符串,match_str--正则表达式
    '示例:A=MatchArr(str,"sum\(v\(\d+,\d+,\d+\):v\(\d+,\d+,\d+\)\)")
    Dim re As New regexp
    Dim m As Match
    Dim objs As MatchCollection
    Dim A()
    Dim i As Long, j As Long
    re.Pattern = match_str
    re.IgnoreCase = True
    re.Global = True
    ReDim A(0)
    A(0) = CStr(re.Test(s))
    If re.Test(s) = True Then
        Set objs = re.Execute(s)
        ReDim Preserve A(objs.Count)
        i = 0
        For Each m In objs
            i = i + 1
            A(i) = m.Value
        Next
    End If
    MatchArr = A
    Set re = Nothing
    Set m = Nothing
    Set objs = Nothing
End Function

3、参考:http://www.accessoft.com/article-show.asp?id=9320中的遍历方法,即可从文件中读出所有题目,并写入数据表。




黄龙 发表于:2014-04-17 10:00:07
谢谢!!那题库录入的时候怎样判断题库中是否已有该题??

煮江品茶 发表于:2014-04-17 12:10:08

从文件中提取的文本如果能用dlookup或者dcount在表记录中查到不就是存在吗?




总记录:4篇  页次:1/1 9 1 :