有的时候总是需要过滤一些没用的东西,歌词过滤工具V1.0的实现(提供下载)有的时候总是需要过滤一些没用的东西,歌词过滤工具V1.0的实现(提供下载)
有的时候总是需要过滤一些没用的东西,歌词过滤工具V1.0的实现(提供下载)
刚做完一个手机音乐播放器,来整理一些歌词资源的时候。发现很多歌词里面有些东西是我们不需要的。比较※、[ti:
[ar:、[al:、[by:]、編曲:、]作词:]、作曲:、]演唱:、]QQ、[offset:、]※等等之类,这个时候就想到做一个简单的过滤工具,把包含这些词的行删掉。这样歌词就显的很简洁了。恩,算是说了下背景吧。其实这个工具不难,不过竟然我做好了,就发布处理算是...
有的时候总是需要过滤一些没用的东西,歌词过滤工具V1.0的实现(提供下载)
有的时候总是需要过滤一些没用的东西,歌词过滤工具V1.0的实现(提供下载)
刚做完一个手机音乐播放器,来整理一些歌词资源的时候。发现很多歌词里面有些东西是我们不需要的。比较※、[ti:
[ar:、[al:、[by:]、編曲:、]作词:]、作曲:、]演唱:、]QQ、[offset:、]※等等之类,这个时候就想到做一个简单的过滤工具,把包含这些词的行删掉。这样歌词就显的很简洁了。恩,算是说了下背景吧。其实这个工具不难,不过竟然我做好了,就发布处理算是提供给有这方面需要的人一些思路。需要解决的问
:
1、效率 我这歌词达到几个G,虽然是本地,多多少少考虑下效率。用了个多线程。
2、方便 过滤的关键字肯定是需要变化的,所以不能写死。用了个配置文件。 3、如何删除行 歌词是.lrc格式的文件,所以比较难做到像数据库那样直接删除某一行。这样的读取文本,然后修改文本,在写回。
主要也就上面这三点。最后提供下载。
截图先:
过滤主要代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace lrcOP
{
public class Filter
{
private ArrayList content = new ArrayList();
private FileIO fileio = new FileIO();
private string[] patterns;
public void ReadFile(string path)
{
content.Clear();
fileio.OpenReadFile(path);
while (!fileio.IsEof())
{
content.Add(fileio.ReadLine());
}
fileio.CloseReadFile();
}
public void Process(string path)
{
ReadFile(path);
FileFilter();
WriteFile(path);
}
public void FileFilter()
{
patterns = Manager.patterns;
for (int j = 0; j < content.Count; j++)
{
for (int i = 0; i < patterns.Length; i++)
{
if (content[j].ToString().Contains(patterns[i]))
{
content.RemoveAt(j);
}
}
}
}
public void WriteFile(string path)
{
fileio.OpenWriteFile(path);
foreach (string str in content)
{
fileio.WriteLine(str.ToString());
}
fileio.CloseWriteFile();
}
}
}
工作线程主要代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace lrcOP
{
public class WorkThread : MyThread
{
public bool stop = false; // stop为true,线程退出
public int threadID; // 当前线程的threadID,用于区分其他
的线程
public override void run() // 线程运行方法
{
LinkedList
paths = new LinkedList();
while (!stop)
{
while (!stop && paths.Count == 0)
{
Manager.GetPaths(paths, 1);
if (paths.Count == 0)
{
Manager.threadWait(threadID);
sleep(3000); // 当前线程休眠3秒
}
}
foreach (string path in paths)
{
if (stop) break;
try
{
Filter filter = new Filter();
filter.Process(path);//过滤处理
Manager.Count++;
}
catch (Exception e)
{
}
}
paths.Clear();
}
}
}
}
线程管理主要代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace lrcOP
{
public class Manager
{
private static WorkThread[] dts = new WorkThread[10];
private static List threads = new List();
public static Queue filepaths = new Queue();
public static string[] patterns;
public static int Count;
private static object syncDir = new object(); // 同步获得保
存网页目录的方法
public static void threadWait(int threadID)
{
if (!threads.Contains(threadID))
threads.Add(threadID);
}
public static bool isFinished() // 如果所有的线程都处于休眠状态,过滤工作结束
{
if (dts.Length == threads.Count)
return true;
else
return false;
}
public static void Clear()
{
Count = 0;
filepaths.Clear();
threads.Clear();
}
public static void startThreads() // 创建并运行用于下载网络资源的线程
{
for (int i = 0; i < dts.Length; i++)
{
dts[i] = new WorkThread();
dts[i].threadID = i;
dts[i].stop = false;
dts[i].start();
}
}
public static void stopThreads() // 停止所有的下载线程
{
for (int i = 0; i < dts.Length; i++)
{
dts[i].stop = true;
}
}
public static void GetPaths(LinkedList paths, int
count)//从队列中得到路径
{
lock (syncDir)
{
for (int i = 0; i < count; i++)
{
if (filepaths.Count > 0)
{
paths.AddLast(filepaths.Dequeue().ToString());
}
else
break;
}
}
}
}
}
下载地址:/Files/yueyue_jwfm/lrcOP.rar
本文档为【有的时候总是需要过滤一些没用的东西,歌词过滤工具V1.0的实现(提供下载)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。