using System.Collections; using System.IO; using System.Windows.Forms; using System.Text; using System; using System.Text.RegularExpressions; class Txtcut { /// <summary> /// /// </summary> /// <param name="path">工作目录</param> /// <param name="fgf">分隔符</param> /// <returns></returns> private static ArrayList Readtxt(string path, string fgf) { if (!File.Exists(path)) { MessageBox.Show("没有找到文件,请检查!"); return null; } try { StreamReader sr = new StreamReader(path, Encoding.Default);//Encoding.GetEncoding("gb2312") string l; ArrayList content = new ArrayList(); while ((l = sr.ReadLine()) != null) { l = l.Trim(); int length = l.Length; int i = 0; bool fgf_flag = false; while (i < length) { string x = l[i].ToString(); i++; if (x.Equals(fgf)) { fgf_flag = true; content.Add(l.Substring(0, i - 1)); length = length - i + 1; i = 0; } } if (!fgf_flag) { content.Add(l); } } sr.Close(); content.TrimToSize(); return content; } catch (IOException ex) { MessageBox.Show(ex.Message.ToString()); return null; } } public static void Cut(string sourcepath, string fgf, string tagertpath, string special, string special2) { ArrayList content = Readtxt(sourcepath, fgf); string fold = Path.GetFileNameWithoutExtension(sourcepath); Directory.CreateDirectory(tagertpath + "//" + fold + "//"); JujgeLines(tagertpath + "//" + fold + "//", content, special, special2); } /// <summary> /// special special2特征字符 /// </summary> /// <param name="path"></param> /// <param name="lines"></param> /// <param name="special"></param> /// <param name="special2"></param> private static void JujgeLines(string path, ArrayList lines, string special, string special2) { try { IEnumerator cIE = lines.GetEnumerator(); ArrayList writelist = new ArrayList(); int i = 0; bool first = true; string filename = null; while (cIE.MoveNext()) { string currentstring = cIE.Current.ToString(); if (Suit(currentstring, special, special2)) { if (filename != null)//过滤章名的重复 { filename = filename.Replace("//", "").Replace("/", "").Replace(":", "").Replace("*", "").Replace("?", "").Replace("/"", "").Replace("<", "").Replace(">", "").Replace("/t", "").Replace("/r", "").Replace("...", ""); } if (first && writelist.Count > 0) { WriteFile(path + Order(i) + "绪言.txt", writelist, Encoding.Default); first = false; } else { WriteFile(path + Order(i) + filename + ".txt", writelist, Encoding.Default); } writelist.Clear(); writelist.Add(currentstring); filename = currentstring; i++; } else writelist.Add(currentstring);//没有特征的则添加 } if (writelist != null)//剩下内容 WriteFile(path + Order(i) + filename + ".txt", writelist, Encoding.Default); } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message.ToString()); } } /// <summary> /// 定义匹配关键字符 /// </summary> /// <param name="comparestr"></param> /// <param name="special1"></param> /// <param name="special2"></param> /// <returns></returns> private static bool Suit(string comparestr, string special1, string special2) { if (Regex.IsMatch(comparestr, special1 + "([ //w/u4e00-/u9fa5]+?)" + special2, RegexOptions.IgnoreCase)) return true; else return false; } /// <summary> /// 写流文件 /// </summary> /// <param name="filename"></param> /// <param name="contentlist"></param> /// <param name="encoding"></param> /// <returns></returns> private static bool WriteFile(string filename, ArrayList contentlist, Encoding encoding) { IEnumerator cIE = contentlist.GetEnumerator(); try { StreamWriter streamWriter = new StreamWriter(filename, true, encoding); while (cIE.MoveNext()) { streamWriter.WriteLine(cIE.Current.ToString()); } streamWriter.Close(); return true; } catch (Exception e) { MessageBox.Show(filename + e.Message.ToString()); } return false; } /// <summary> /// 序号处理 /// </summary> /// <param name="i"></param> /// <returns></returns> private static string Order(int i) { string istr = null; if (i / 1000 > 0) istr = i + ""; else if (i / 100 > 0) istr = "0" + i; else if (i / 10 > 0) istr = "00" + i; else istr = "000" + i; return istr; } }