找回密码
 加入
搜索
查看: 12079|回复: 17

[效率算法] 【已解决】文本内容倒序排列请教

 火.. [复制链接]
发表于 2014-10-29 22:21:01 | 显示全部楼层 |阅读模式
本帖最后由 chamlien 于 2014-11-2 23:32 编辑
★★★★★
Nexus 7 (grouper)
Dante Leone on 13 Oct 2014 at 02:57
Реклама этого браузера везде уже задолбала
Reply to this review
★★★★★
App version 9.9.4
Galaxy S5 (lentislteskt)
ИЛЬЯ Петрушкин on 12 Oct 2014 at 22:27
Auto-translated from Macedonian
Shit and Parasha polneйshaя Show original review
Reply to this review
想把五角星里面的内容从低往上调换排列成如下形式:(注意每组的顺序不能改变)
★★★★★
App version 9.9.4
Galaxy S5 (lentislteskt)
ИЛЬЯ Петрушкин on 12 Oct 2014 at 22:27
Auto-translated from Macedonian
Shit and Parasha polneйshaя Show original review
Reply to this review
★★★★★
Nexus 7 (grouper)
Dante Leone on 13 Oct 2014 at 02:57
Реклама этого браузера везде уже задолбала
Reply to this review

我只会倒序排列但是每行的顺序已经改变了,期待高人解决
发表于 2014-10-30 09:21:23 | 显示全部楼层
很笨很笨的方法,再长点我自己看糊涂了~
Dim $str[1], $i = 1
Dim $line, $wTag
Dim $hFile
$hFile = FileOpen(@ScriptDir & "\test.txt")
If $hFile = -1 Then Exit (MsgBox(4096, "错误", "不能打开文件."))
While 1
        $line = FileReadLine($hFile)
        If @error = -1 Then ExitLoop
        If StringInStr($line, "★") Then
                $wTag = UBound($str)
                ReDim $str[UBound($str) + 1]
                $str[$wTag] = $i
                $str[0] = UBound($str)
        EndIf
        $i += 1
WEnd
$wTag = UBound($str)
ReDim $str[UBound($str) + 1]
$str[$wTag] = $i
$str[0] = UBound($str)

Dim $newstr[$str[0]], $nline
For $j = 1 To $str[0] - 1
        If ($j + 1) <= ($str[0] - 1) Then
                For $k = $str[$j] To $str[$j + 1] - 1
                        $line = FileReadLine($hFile, $k)
                        $nline &= $line & @CRLF
                Next
                $newstr[$j] = $nline
                $nline = ""
        EndIf
Next
FileClose($hFile)

Dim $result
For $i = UBound($newstr) - 1 To 0 Step -1
        If $newstr[$i] <> "" Then $result &= $newstr[$i]
Next
MsgBox(0, 0, $result)
发表于 2014-10-30 09:29:13 | 显示全部楼层
回复 1# chamlien
Local $str = ClipGet()
Local $aRe = StringRegExp($str, '(?m)^★{5}[^★]+', 3)
If @error Then Exit MsgBox(16, 'err', 'getting wrong sting!')
Local $sNew = ''
For $i = UBound($aRe) -1 To 0 Step -1
        $sNew &= $aRe[$i] & @CRLF
Next
MsgBox(0, '', $str & @CRLF & @CRLF & @CRLF & $sNew)

评分

参与人数 1金钱 +30 收起 理由
haijie1223 + 30

查看全部评分

发表于 2014-10-30 09:50:48 | 显示全部楼层
Local $str = ClipGet()
Local $sRE = StringRegExpReplace($str, '(?s)(★.+?)(\r\n)(★.+)', '\3\2\1')
MsgBox(0, '替换结果', $sRE)

评分

参与人数 1金钱 +30 收起 理由
haijie1223 + 30

查看全部评分

发表于 2014-10-30 11:22:15 | 显示全部楼层
回复 4# afan


    A版,试了一下你的代码,如果他的文本还有加长的话,似乎不通用。
发表于 2014-10-30 11:42:53 | 显示全部楼层
回复 5# haijie1223


    只是针对两段互换位置,尤其仅针对LZ的实例,如果是固定段数也可以增加固定表达式,否则一般就循环处理了
 楼主| 发表于 2014-10-30 15:43:45 | 显示全部楼层
回复 2# haijie1223

办法是比较笨,不过我自己也写出了代码,用_FileReadToArray,判断起始和结束字符串,然后倒序,不过也比较麻烦,不知道还有好办法不?
 楼主| 发表于 2014-10-30 15:44:18 | 显示全部楼层
回复 3# user3000

这个如果很多数据应该行不通的吧
 楼主| 发表于 2014-10-30 15:44:51 | 显示全部楼层
回复 4# afan

这么简洁的代码?能适用于很多数据吗?
发表于 2014-10-30 16:45:39 | 显示全部楼层
回复 9# chamlien


    很多数据就用3#的代码吧
Dim $hFile, $sCon, $Newstr
$hFile = FileOpen(@ScriptDir & "\test.txt")
If $hFile = -1 Then Exit (MsgBox(4096, "error", "File wrong!"))
$sCon = FileRead($hFile)
$astr = StringRegExp($sCon, '(?m)★+[^★]+', 3)
For $i = UBound($astr) - 1 To 0 Step -1
        $Newstr &= $astr[$i] & @CRLF
Next

MsgBox(0, '', $Newstr)
 楼主| 发表于 2014-10-30 18:31:07 | 显示全部楼层
回复 10# haijie1223

先收藏了,今晚回来测试一下
 楼主| 发表于 2014-10-31 22:04:08 | 显示全部楼层
回复 10# haijie1223

测试后能倒序,但是多行数据会出现多个回车,去掉@CRLF又会出现个别数据没有回车,何解?
发表于 2014-11-1 15:33:45 | 显示全部楼层
回复 12# chamlien
#include <array.au3>
Dim $hFile, $sCon, $Newstr = ""
$hFile = FileOpen(@ScriptDir & "\test.txt")
If $hFile = -1 Then Exit (MsgBox(4096, "error", "File wrong!"))
$sCon = FileRead($hFile)
$sCon &= "  "
$astr = StringRegExp($sCon, '(?m)★+[^★]+', 3)
For $i = UBound($astr) - 1 To 0 Step -1
        $astr[$i] = StringTrimRight($astr[$i], 2)
        $Newstr &= $astr[$i] & @CRLF
Next
MsgBox(0, '', $Newstr)
 楼主| 发表于 2014-11-1 20:09:02 | 显示全部楼层
回复 13# haijie1223

代码测试通过,非常简洁,要好好研究一下。另外贴出我笨代码,294行的文本,这两个代码运行对比起来好像都差不多。(代码后面还有内容)
#include <Array.au3>
#include <File.au3>
 _1234()
Func _1234();
        Local $aRecords
        If Not _FileReadToArray("源.txt", $aRecords) Then
                MsgBox(4096, "错误", " 文件不存在!" & @error)
                Exit
        EndIf
        For $line = $aRecords[0] To 1 Step -1;从最后一行读取
                If $aRecords[$line] == "★★★★★" Then
                        For $x = $line To $aRecords[0]
                                If $aRecords[$x] == "Reply to this review" Then
                                        _xuan($line, $x - $line, $aRecords);$line为识别到的行数并;循环识别到的组数
                                        ExitLoop
                                ElseIf $aRecords[$x] == "Edit your reply" Then;这里是筛除掉有Edit your reply的一组
                                        ExitLoop
                                EndIf
                        Next
                        ContinueLoop
                EndIf
        Next

EndFunc   ;==>_1234
Func _xuan($shibiehang, $hangshu, $aRecords)
        $d = FileOpen("test.txt", 257)
        Local $cx = $shibiehang
        For $nn = $cx To $hangshu + $shibiehang Step 1
                FileWriteLine($d, $aRecords[$nn])
        Next
        FileClose($d)
        ;MsgBox(0,$shibiehang,$hangshu)
EndFunc   ;==>_xuan
下面是我要处理的文本内容,要求是去除含有“Edit your reply”和“Auto-translated from”并实现倒序,代码我已经实现了,就是两次使用以上办法,先倒序去除掉有Edit your reply的组别,保存为文本再开始去除有Auto-translated from的组别,这样效率不高,看看高手的实现代码怎么样?
★★★★★
Nexus 7 (grouper)
Dante Leone on 13 Oct 2014 at 02:57
Реклама этого браузера везде уже задолбала
Reply to this review
★★★★★
App version 9.9.4
Galaxy S5 (lentislteskt)
ИЛЬЯ Петрушкин on 12 Oct 2014 at 22:27
Auto-translated from Macedonian
Shit and Parasha polneйshaя Show original review
Reply to this review
★★★★★
Device
Глеб Андреев on 12 Oct 2014 at 21:29
Auto-translated from Bulgarian
Cal Show original review
Reply to this review
★★★★★
App version 9.9.4
Galaxy Pocket Neo (corsicass)
алексей афонченко on 12 Oct 2014 at 20:26
Полное говно
Reply to this review
★★★★★
Fonepad 7 (K012)
Elizabeth Salinas on 12 Oct 2014 at 20:06
Проблема с установкой После установки говорит, что не поддерживается на моем планшете и предлагает установить программу из неизвестного источника. Какого я должна неизвестную фигню устанавливать? Даже не знаю, о программе столько хороших отзывов, сделайте что-нибудь.
Reply to this review
★★★★★
App version 9.9.4
ITP-R208W (rk30sdk)
роман романов on 12 Oct 2014 at 19:52
Ебал я в рот это дермище. Я из-за этого говна был готов убить планшет об стену!
Reply to this review
★★★★★
App version 9.9.4
KENEKSI_Sky
Myss Magomedov on 12 Oct 2014 at 18:39
Фигня
Reply to this review
★★★★★
App version 9.9.4
Xperia SP (C5302)
Dana Rybakova on 12 Oct 2014 at 16:44
Auto-translated from Serbian
Count Show original review
Reply to this review
★★★★★
App version 9.9.4
Philips_W732_A
Ольга Романова on 12 Oct 2014 at 15:56
КАКОГО ЧЕРТА В ПРИЛОЖЕНИИ РЕКЛАМА ПОРНО И УВЕЛИЧЕНИЯ МУЖСКИХ ПИПИСЕК??? Я НЕ ХОЧУ, ЧТОБ МОЙ РЕБЕНОК СЛУЧАЙНО НА "ЭТО" НАТОЛКНУЛСЯ!!! УДАЛЯЮ!!! И НИКОМУ СКАЧИВАТЬ НЕ СОВЕТУЮ!!!!
Reply to this review
★★★★★
Galaxy S4 (ja3g)
Игорь Скопин on 12 Oct 2014 at 14:29
Не качается сука
Reply to this review
★★★★★
App version 9.8.9
Galaxy S4 (ja3g)
Мурад Байрамалиев on 12 Oct 2014 at 14:27
Auto-translated from Macedonian
Not whether tokens Show original review
Reply to this review
★★★★★
App version 9.7.5
Spark
Virusnya Jamshilov on 12 Oct 2014 at 14:03
Хуйня Вылетает
You replied on 6 May 2014 at 11:31
Добрый день! Приносим свои извинения за доставленные неудобства. Для полного понимания проблемы, пришлите нам, пожалуйста, на ru.support@ucweb.com более подробную информацию: 1. версию браузера 2. модель устройства 3. подробное описание проблемы по шагам. 4. IMEI устройства (*#06#)
Edit your reply
★★★★★
App version 9.9.2
Galaxy S3 (m0)
ali vahid on 12 Oct 2014 at 12:15
Удаляю.последнее обновление сделало браузер хламом
You replied on 2 Sep 2014 at 18:13
Добрый день! Приносим свои извинения за доставленные неудобства. Для полного понимания проблемы, пришлите нам, пожалуйста, на ru.support@ucweb.com более подробную информацию о Вашем устройстве и опишите проблему по шагам, мы постараемся решить ее как можно скорее. Спасибо!
Edit your reply
★★★★★
Galaxy Y (GT-S5360)
Денис Поляков on 12 Oct 2014 at 11:23
Приложение не грузиться.Пишет что памяти нехватает а у меня еще 14гб. на внутреней и 7гб. на внешней карте памяти осталось.
Reply to this review
发表于 2014-11-2 08:19:34 | 显示全部楼层
回复 14# chamlien


    你是删除行还是删除段啊,你的代码太麻烦,没看明白啊。删除行直接替换文本就可以了。删除段就用下面的:
Dim $hFile, $sCon, $Newstr = ""
$hFile = FileOpen(@ScriptDir & "\test.txt")
If $hFile = -1 Then Exit (MsgBox(4096, "error", "File wrong!"))
$sCon = FileRead($hFile)
$sCon &= "  "
$astr = StringRegExp($sCon, '(?m)★+[^★]+', 3)
For $i = UBound($astr) - 1 To 0 Step -1
        $astr[$i] = StringTrimRight($astr[$i], 2)
        If StringInStr($astr[$i], "Auto-translated from") Or StringInStr($astr[$i], "Edit your reply") Then $astr[$i] = ""
        $Newstr &= $astr[$i] & @CRLF
Next
$Newstr = StringRegExpReplace($Newstr, "(\r\n)+", @CRLF)
MsgBox(0, '', $Newstr)

评分

参与人数 1金钱 +28 收起 理由
chamlien + 28 我很赞同

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 21:29 , Processed in 0.089023 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表