[已解决]不规则数据处理.
本帖最后由 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 ........ 是合并去重复项?
一堆数,看得眼晕. 楼主是在透人玩吧 我听楼上大婶说是逗人玩的,我也信了 你可以把处理规则和结果简单说一下,不然还要让我们看结果猜规则么? 本帖最后由 Mr丶KQ 于 2017-3-16 14:29 编辑
回复 4# 1361739590
哎呀.这怎么说了.
1.txt与2.txt的数据,如上面.
2.txt通过1.txt的数据进行对比.
也就是,非数字部分的数据要匹配
并且数字部分相减的话,不能为负数
如 25315|↓|25311 与 25651|↓|25650 匹配 回复 5# Mr丶KQ
哦知道一点了,数字相减不能为负数是指哪些数据相减呢? 回复 6# 1361739590
25315|↓|25311 与 25603|←|25601 这样就不是匹配的
25315|↓|25311 与 25651|↓|25650 匹配
因为两个是↓.
且25651 - 25315和25650 - 25311
相减后,不为负数和小于500 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 回复 8# Duvet
这只是把数据简化了
实际数据有1000多行.
为降低双循环占用的资源和提升效率.
For $BO = $KSNumber1
$KSNumber1 第二次循环开始不能为0 ;和中的Col4、5、6 数值不正确
我看是正确的啊。哪边不对。 帮你顶{:face (303):} ;和中的Col4、5、6 数值不正确
我看是正确的啊。哪边不对。
1361739590 发表于 2017-3-17 16:18 http://www.autoitx.com/images/common/back.gif
已经解决了
3Q. 能否請問一下,您是怎麼解決的? 回复 13# Duvet
判定的话
如果索引相同则
$KSNumber1 = $AT 或者 $KSNumber1 = $BO
否则
只能将搜索到的索引位置对调 回复 12# Mr丶KQ
那你的500是怎么判断?
页:
[1]
2