kk_lee69 发表于 2014-5-26 23:49:38

[已解决]求助 文本文件的处理转成数组数据,可能需要正则的帮忙~~

本帖最后由 kk_lee69 于 2014-5-30 22:47 编辑

求助 文本文件的处理转成数组数据,可能需要正则的帮忙~~

有文本文件 格式如附件,需要将数据转成 数组的方式处理
试过 使用 _FileReadToArray是可以将数据拆成 一行一行的

但是 问题来了
0030 4710392771568 一拖净蜂巢式胶棉拖把(双棉头特惠组)B1   6支            150.00       900.00



0050 4710409090453 立体式药材袋16入                         6包               15.00      90.00

会找不出原则
因为使用 StringLen想用 固定字符串长度 处理 , 再遇到中文的时候会有问题
AU3 认为中文字的长度是 1 , 但是 再原本的文本文件 , 其实一个中文字占两个英数的大小

这样 一来就很难用 固定长度的方式 取得 中间的产品名称,不知道有没有人有更好的方法可以教教我的,麻烦各位懂得正则的高手了~~~



目前 能夠做到的如下圖



希望 最終 的到的結果 如下圖

李岸 发表于 2014-5-27 05:02:33

你认为你这么提问别人会看懂吗? 至少把你想要的结果给出来嘛!

fuldho 发表于 2014-5-27 09:23:20

本帖最后由 fuldho 于 2014-5-27 09:25 编辑

关于StringLen字节读取可以这样处理,只是建议,不是高招

$txt16 = StringToBinary($txt)
;转16进制
$STR = StringTrimLeft($txt16,2)
;删除"0x"
$LEN = StringLen($STR)/2
;除以2
LEN = StringLen(StringTrimLeft(StringToBinary($txt),2))/2

kk_lee69 发表于 2014-5-27 10:57:43

回复 2# 李岸

已補充說明感謝回復

yuanniao 发表于 2014-5-27 18:15:25

#include <Array.au3>
$hText = @ScriptDir & '\p.txt'
$sContent = FileRead($hText)
MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$sContent' & @lf & @lf & 'Return:' & @lf & $sContent & @lf & @lf & '@Error:' & @lf & @Error) ;### Debug MSGBOX

$a_NameArray = StringRegExp($sContent, '\d{13} (.+)\h{20}', 3)
If Not @error Then
        _ArrayDisplay($a_NameArray, 'Debug~~~')
Else
        MsgBox(0,'',@error)
EndIf

骗子 发表于 2014-5-30 22:02:14

本帖最后由 骗子 于 2014-5-30 22:03 编辑

笨办法,结果应该和你的图完全一样了
#include <Array.au3>
$txt = StringRegExpReplace(FileRead('p.txt'), '\h+', '|')
$array = StringRegExp($txt, '\V+', 3)
For $i = UBound($array) - 1 To 0 Step -1
        $array[$i] = StringTrimLeft($array[$i], 1)
        $array[$i] = StringRegExpReplace($array[$i], '订\|货\|单', '订货单')
        $array[$i] = StringRegExpReplace($array[$i], '金\|额', '金额')
        If StringInStr($array[$i], '________') Or StringInStr($array[$i], '=====') Or $array[$i] = '|' Then _ArrayDelete($array, $i)
Next
Dim $temp
For $i = 0 To UBound($array) - 1
        $ta = StringSplit($array[$i], '|', 2)
        For $j = 0 To UBound($ta) - 1
                $temp[$i][$j] = $ta[$j]
        Next
        If UBound($ta) = 6 Then
                For $j = 0 To 9
                        $temp[$i][$j] = ''
                Next
                For $j = 0 To 3
                        $temp[$i][$j] = $ta[$j]
                Next
                $temp[$i] = $ta
                $temp[$i] = $ta
        EndIf       
        If UBound($ta) = 7 Then
                For $j = 0 To 9
                        $temp[$i][$j] = ''
                Next
                $temp[$i] = $ta
                $temp[$i] = $ta
                $temp[$i] = $ta &' '& $ta
                $temp[$i] = $ta
                $temp[$i] = $ta
                $temp[$i] = $ta
        EndIf       
Next
_ArrayDisplay($temp)

骗子 发表于 2014-5-30 22:08:38

最主要的就是StringRegExpReplace和StringSplit
#include <Array.au3>
$txt = StringRegExpReplace(FileRead('p.txt'), '\h+', '|')
$array = StringRegExp($txt, '\V+', 3)
For $i = UBound($array) - 1 To 0 Step -1
        $array[$i] = StringTrimLeft($array[$i], 1)
        $array[$i] = StringRegExpReplace($array[$i], '订\|货\|单', '订货单')
        $array[$i] = StringRegExpReplace($array[$i], '金\|额', '金额')
        If StringInStr($array[$i], '________') Or StringInStr($array[$i], '=====') Or $array[$i] = '|' Then _ArrayDelete($array, $i)
Next
Dim $temp
For $i = 0 To UBound($array) - 1
        $ta = StringSplit($array[$i], '|', 2)
        If UBound($ta) = 6 Then ;正常商品
                For $j = 0 To 3
                        $temp[$i][$j] = $ta[$j]
                Next
                $temp[$i] = $ta
                $temp[$i] = $ta
        ElseIf UBound($ta) = 7 Then ;商品名中有一个空格的
                $temp[$i] = $ta
                $temp[$i] = $ta
                $temp[$i] = $ta & ' ' & $ta
                $temp[$i] = $ta
                $temp[$i] = $ta
                $temp[$i] = $ta
        Else
                For $j = 0 To UBound($ta) - 1
                        $temp[$i][$j] = $ta[$j]
                Next
        EndIf
Next
_ArrayDisplay($temp)

kk_lee69 发表于 2014-5-30 22:46:34

回复 7# 骗子

酷!!可以用太感謝了!!待會來研究一下 程式的邏輯感謝您的幫忙

ak47gglllk 发表于 2014-5-31 12:21:49

e 这么高深的东西,小白来露个脸,继续学习。话说楼主的sql实例弄得很好,不知可以深度讲解否{:face (427):}

qsy666888 发表于 2014-6-2 16:32:41

高深,谢谢楼主提高

qsy666888 发表于 2014-6-2 16:32:47

高深,谢谢楼主提高
页: [1]
查看完整版本: [已解决]求助 文本文件的处理转成数组数据,可能需要正则的帮忙~~