callmekq 发表于 2017-3-15 23:04:18

[已解决]不规则数据处理.

本帖最后由 Mr丶KQ 于 2017-3-18 10:14 编辑

1.txt25315|↓|25311
25429|←|25423
26307|空格|26301
27338|←|27335
27519|→|27513
27951|空格|27946
28961|←|28953
29181|↓|29177
29591|空格|29582
30369|↑|30360
30706|→|30703
30874|→|30874
31238|空格|31231
32055|←|32047
32311|↓|32304
32466|←|32464
32903|空格|32895
33463|↓|33455
33647|↑|33639
33818|↑|33815;-------------------
2.txt25603|←|25601
25651|↓|25650
26393|空格|26393
27579|←|27578
27635|→|27633
28023|空格|28016
29069|←|29066
29257|↓|29257
29655|空格|29649
30467|↑|30465
30773|→|30770
30947|→|30947
31303|空格|31298
32154|←|32154
32561|←|32561
32561|↓|32561
32959|空格|32954
33535|↓|33530
33705|↑|33705
33921|↑|33921
34592|空格|34584
35178|↑|35178
35612|↓|35610
35639|→|35633
36242|空格|36242
36970|↑|36962
36970|→|36962
37230|↓|37225
37883|空格|37883
38545|↑|38536;-------------------
1.txt与2.txt对比后要的结果25651|↓|25650
25603|←|25601
26393|空格|26393
27579|←|27578
27635|→|27633
28023|空格|28016
29069|←|29066
29257|↓|29257
29655|空格|29649
30467|↑|30465
30773|→|30770
30947|→|30947
31303|空格|31298
32154|←|32154
32561|↓|32561
32561|←|32561
32959|空格|32954
33535|↓|33530
33705|↑|33705
33921|↑|33921;-------------------
这是目前有问题的代码:#include <Array.au3>

$TwoToOneFullData1 = _FileRead(@ScriptDir & "\1.txt",0)
$FullEventKeyATMulti = StringRegExp($TwoToOneFullData1,"\V+",3)
$AllEventKeyATMulti = UBound($FullEventKeyATMulti)

$TwoToOneFullData2 = _FileRead(@ScriptDir & "\2.txt",0)
$FullEventKeyBOMulti = StringRegExp($TwoToOneFullData2,"\V+",3)
$AllEventKeyBOMulti = UBound($FullEventKeyBOMulti)

Local $FullKSData[$AllEventKeyATMulti]
Local $KSState1,$KSNumber1 = 0,$KSUse1 = ""

For $AT = 0 To $AllEventKeyATMulti - 1
        $KSState1 = 0

        $EventKeyAT2 = StringSplit($FullEventKeyATMulti[$AT],"|")

        $FullKSData[$AT] = $AT + 1
        $FullKSData[$AT] = $EventKeyAT2
        $FullKSData[$AT] = $EventKeyAT2
        $FullKSData[$AT] = $EventKeyAT2

        For $BO = $KSNumber1 To $AllEventKeyBOMulti - 1
                If $KSUse1 <> $FullEventKeyBOMulti[$BO] Then
                        $EventKeyBO2 = StringSplit($FullEventKeyBOMulti[$BO],"|")

                        If ($EventKeyBO2 - $FullKSData[$AT] >= 0) And ($EventKeyBO2 = $FullKSData[$AT]) And ($EventKeyBO2 - $FullKSData[$AT] >= 0) Then
                                $FullKSData[$AT] = $EventKeyBO2
                                $FullKSData[$AT] = $EventKeyBO2
                                $FullKSData[$AT] = $EventKeyBO2

                                $KSState1 = 1
                                $KSNumber1 += 1
                                $KSUse1 = $FullEventKeyBOMulti[$BO]

                                ExitLoop
                        EndIf
                EndIf
        Next

        If $KSState1 = 0 Then
                $FullKSData[$AT] = "/"
                $FullKSData[$AT] = "/"
        EndIf
Next

;和中的Col4、5、6 数值不正确
_ArrayDisplay($FullKSData,"")

Exit

Func _FileRead($RcdFile,$Mode = 0)
        Local $RcdFileOpen = FileOpen($RcdFile,$Mode)
        Local $RcdFileString = String(FileRead($RcdFileOpen))

        FileClose($RcdFileOpen)

        Return $RcdFileString
EndFunc

Alam 发表于 2017-3-16 07:08:33

........ 是合并去重复项?
一堆数,看得眼晕. 楼主是在透人玩吧

229989799 发表于 2017-3-16 09:50:52

我听楼上大婶说是逗人玩的,我也信了

1361739590 发表于 2017-3-16 10:06:30

你可以把处理规则和结果简单说一下,不然还要让我们看结果猜规则么?

callmekq 发表于 2017-3-16 14:26:08

本帖最后由 Mr丶KQ 于 2017-3-16 14:29 编辑

回复 4# 1361739590

哎呀.这怎么说了.
1.txt与2.txt的数据,如上面.
2.txt通过1.txt的数据进行对比.

也就是,非数字部分的数据要匹配
并且数字部分相减的话,不能为负数

如 25315|↓|25311 与 25651|↓|25650 匹配

1361739590 发表于 2017-3-16 16:07:48

回复 5# Mr丶KQ


    哦知道一点了,数字相减不能为负数是指哪些数据相减呢?

callmekq 发表于 2017-3-16 16:28:16

回复 6# 1361739590

25315|↓|25311 与 25603|←|25601 这样就不是匹配的
25315|↓|25311 与 25651|↓|25650 匹配
因为两个是↓.

且25651 - 25315和25650 - 25311
相减后,不为负数和小于500

Duvet 发表于 2017-3-16 22:25:14

For $BO = $KSNumber1 To $AllEventKeyBOMulti - 1
改為
For $BO = 0 To $AllEventKeyBOMulti - 1

If ($EventKeyBO2 - $FullKSData[$AT] >= 0) And ($EventKeyBO2 = $FullKSData[$AT]) And ($EventKeyBO2 - $FullKSData[$AT] >= 0) Then
改為
If (($EventKeyBO2 - $FullKSData[$AT]) > 0) And (($EventKeyBO2 - $FullKSData[$AT]) < 500) And _
                                (($EventKeyBO2 - $FullKSData[$AT]) > 0) And (($EventKeyBO2 - $FullKSData[$AT]) < 500) And _
                                ($EventKeyBO2 == $FullKSData[$AT]) Then

callmekq 发表于 2017-3-17 15:49:00

回复 8# Duvet

这只是把数据简化了
实际数据有1000多行.

为降低双循环占用的资源和提升效率.
For $BO = $KSNumber1
$KSNumber1 第二次循环开始不能为0

1361739590 发表于 2017-3-17 16:18:27

;和中的Col4、5、6 数值不正确
我看是正确的啊。哪边不对。

lxwlxwayy 发表于 2017-3-17 22:23:48

帮你顶{:face (303):}

callmekq 发表于 2017-3-18 10:12:00

;和中的Col4、5、6 数值不正确
我看是正确的啊。哪边不对。
1361739590 发表于 2017-3-17 16:18 http://www.autoitx.com/images/common/back.gif

已经解决了
3Q.

Duvet 发表于 2017-3-18 14:14:45

能否請問一下,您是怎麼解決的?

callmekq 发表于 2017-3-18 17:53:40

回复 13# Duvet

判定的话
如果索引相同则
$KSNumber1 = $AT 或者 $KSNumber1 = $BO

否则
只能将搜索到的索引位置对调

1361739590 发表于 2017-3-20 09:09:22

回复 12# Mr丶KQ


    那你的500是怎么判断?
页: [1] 2
查看完整版本: [已解决]不规则数据处理.