读LRC歌词中的歌词作为变量逐步输出
我有一个lrc歌词文件,里面的内容如下格式:萧闳仁 - 连贝多芬都想告诉你
www.51lrc.com ▓ 李泽昊
歌词吾爱 带你心飞
我的抽屉 沾满灰尘
有多久没整理
浓浓哀伤在叹息
我拿起了笔 写了古典
第一乐章 我想告诉你
我快要听不清楚
非得要像休止符
黑不拉几要断断续续
连贝多芬 也都爱上你
你说分开最美丽
好! 我还想乐章在继续
爱来爱去 爱不过是病
连贝多芬 都想告诉你
耳聋了 更有意义
也许你只是下雨下在我的青草地
等放晴了 就自然蒸发
我现在想把歌词按时间方式一个一个做为变量按时间输出到txt文本中。不知道可不可以实现?读的时候要把 []之内的数据都去掉的。 这个有意思,应该不难,不过我现在没空,回头再弄 谢谢你哦,我从昨天弄到现在了。没搞定。在论坛潜水快2年了。第一次发帖。希望有个结果。 回复 3# jneyxwry
你最好把要输出的样式举例出来~ $dir = @ScriptDir&"\123.lrc"
$ti = "设置"
HotKeySet("{F1}","tian")
$i = 0
While 1
Sleep(100)
WEnd
Func tian()
$a = WinExists($ti)
If $a = 1 Then
$var = IniReadSection($dir,"config")
If Not @error Then
$i += 1
ControlSetText ($ti, "", 'Edit2', $var[$i] )
ControlClick ($ti, "", 'Button1')
If $i = $var Then $i = 0
EndIf
Else
MsgBox(0,'提示','指定窗口“'&$ti&'”不存在,请检查!')
EndIf
EndFunc
我这些代码是网上找的,感觉用起来很不爽啊要把东西都删掉。 就是读lrc文件。然后直接一行一行的写到 "设置" 窗口里的Edit2 里。 $dir = @ScriptDir&"\123.lrc"
$ti = "设置"
HotKeySet("{F1}","tian")
$i = 0
While 1
Sleep(100)
...
jneyxwry 发表于 2010-4-7 20:58 http://www.autoitx.com/images/common/back.gif
你这是做同步显示歌词,还是不用同步,只需全部输出就行? 要按照里面的时间来输出才行的吧?我看不懂那些时间是怎么回事,要不我也写来玩玩。 本帖最后由 afan 于 2010-4-7 22:52 编辑
将一楼的歌词文本保存为 “连贝多芬都想告诉你.lrc”
;#include <Array.au3>
Local $lrc = '连贝多芬都想告诉你.lrc'
Local $str = FileRead($lrc)
Local $sR = StringRegExp($str, '\[\d\d:\d\d.\d\d\]', 3)
_ArraySort($sR)
Local $txt = '', $i, $_time
For $i = 0 To UBound($sR) - 1
$_time = StringRegExpReplace($sR[$i], '(\[|\])', '\\$1')
$txt &= StringRegExpReplace($str, '(?s).+?' & $_time & '(?:\[[^\]]+\])*([^\r]*).+', '$1') & @CRLF
;以上是做整体输出演示用,如需输出单行,下行即可。如需同步时间,也只需加上匹配经过时间=$sR[$i]
;MsgBox(0, 0, StringRegExpReplace($str, '(?s).+?' & $_time & '(?:\[[^\]]+\])*([^\r]*).+', '$1'))
Next
MsgBox(0, 0, $txt) 本帖最后由 C.L 于 2010-4-7 23:07 编辑
需要有些时间不知道是怎么回事,我去除了我不懂的,选懂的做了一个,挺好玩的,呵呵~~
我没写到文件里,建了个GUI的EDIT来显示,用的是事件模式,是为了可以随时结束,不被循环影响,时间为了看着快点,我调快了5倍,歌词前我加上了显示的时间,方便看,代码贴上来:
#include <GUIConstantsEx.au3>
#include <GUIConstantsEx.au3>
$str = _
'' & @CRLF & _
'' & @CRLF & _
'' & @CRLF & _
'' & @CRLF & _
'萧闳仁 - 连贝多芬都想告诉你' & @CRLF & _
'www.51lrc.com ▓ 李泽昊' & @CRLF & _
'歌词吾爱 带你心飞' & @CRLF & _
'' & @CRLF & _
'我的抽屉 沾满灰尘' & @CRLF & _
'有多久没整理' & @CRLF & _
'浓浓哀伤在叹息' & @CRLF & _
'我拿起了笔 写了古典' & @CRLF & _
'第一乐章 我想告诉你' & @CRLF & _
'我快要听不清楚' & @CRLF & _
'非得要像休止符' & @CRLF & _
'黑不拉几要断断续续' & @CRLF & _
'连贝多芬 也都爱上你' & @CRLF & _
'你说分开最美丽' & @CRLF & _
'好! 我还想乐章在继续' & @CRLF & _
'爱来爱去 爱不过是病' & @CRLF & _
'连贝多芬 都想告诉你' & @CRLF & _
'耳聋了 更有意义' & @CRLF & _
'也许你只是下雨下在我的青草地' & @CRLF & _
'等放晴了 就自然蒸发' & @CRLF
Opt("GUIOnEventMode", 1)
MsgBox (0,"原始Lrc文件",$str)
$Form = GUICreate("Test", 413, 566, @DesktopWidth / 2 - 150, @DesktopHeight / 2 - 320)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
$Edit = GUICtrlCreateEdit("", 1, 8, 408, 550)
GUICtrlSetData(-1, "")
GUISetState()
$aStr = StringRegExp($str, "(\[.*\])([^\]]+)\r", 3)
$maxtime = $aStr
$out = ""
$t = TimerInit()
While 1
For $i = 0 To UBound($aStr) - 1
$time = StringRegExp($aStr[$i], "\[(.*?)\.", 3)
If IsArray($time) Then
For $j = 0 To UBound($time) - 1
$tmptime = StringSplit($time[$j], ":")
$tagtime = $tmptime * 60 + $tmptime
If Round(TimerDiff($t) / 1000, 2) == Round($tagtime / 5, 2) Then
$out &= $tmptime & ":" & $tmptime & @TAB & $aStr[$i + 1] & @CRLF
GUICtrlSetData($Edit, $out)
Sleep(200)
If $tagtime == "329" Then
Sleep (3000)
GUICtrlSetData($Edit, $out & @CRLF & @TAB & "**********end**********")
ExitLoop
EndIf
EndIf
Next
EndIf
Next
WEnd
Func _exit()
Exit
EndFunc ;==>_exit
回复 9# C.L
我也觉得这个话题有意思,呵呵 回复 10# afan
是啊,挺有意思。
我看你的代码,你的正则真的很强大,佩服。 回复 11# C.L
瞎掰的,呵呵~ 回复 12# afan
正则我没怎么去研究过,只懂一点点,不过我是偶尔用用,本着够用就好,够用就好(自我解嘲),呵呵~ 回复 13# C.L
我也差不多,一遍都没看完过,也就玩些常用的~
p.s, 运行了下你的代码,你完全可以整个歌词播放器玩玩了,呵呵 afan 哥的我好像运行不了。直接提示个0。就没了