WPF開發(fā)txt閱讀器實現(xiàn)目錄提取功能
目錄類
目錄是由標(biāo)題組成,而標(biāo)題往往包括章節(jié)序號以及標(biāo)題名稱,而對于一個文本文件來說,如果想實現(xiàn)點擊目錄實現(xiàn)跳轉(zhuǎn),則又必須包含該標(biāo)題在正文中出現(xiàn)的位置。所以,在新建目錄之前,首先應(yīng)該新建一個章節(jié)類。
class Section
{
public int order;
public int location; //文字位置
public string title;
public Section(int order, string title)
{
this.order = order;
this.title = title;
}
public Section(int order, string title, string txt, int st=0)
{
this.order = order;
this.title = title;
location = txt.IndexOf(title, st);
}
public Section(int order, string title, int location)
{
this.order = order;
this.title = title;
this.location = location;
}
}
其中,IndexOf用于定位字符串在文本文檔中出現(xiàn)的第一個位置,st為開始搜索的字符串位置。
有了章節(jié)之后,就可以創(chuàng)建目錄了,簡單地來說,目錄就是章節(jié)列表,但除此之外,還需要有生成目錄的方法,其大致內(nèi)容如下
class Catalog
{
public List<Section> sections;
public Catalog(string txt, bool withCatalog)
{
??????? }
}提取標(biāo)題
一般來說,txt中并不包含目錄信息,所謂生成目錄,無非是從文本文檔中提取標(biāo)題,所以需要分析標(biāo)題的特點。
此外,有一些文本文檔會在正文之前列出目錄,這種可以把目錄提取出來之后,再從文檔中查找相應(yīng)的章節(jié),相對來說會更加方便,考慮到先易后難的原則,首先實現(xiàn)這種目錄生成邏輯,在Catalog類的構(gòu)造函數(shù)中,當(dāng)withCatalog為true時,表示這種情況,下面是具體實現(xiàn)方法
public int maxSecLength = 30; // 標(biāo)題最長字數(shù)
public string[] ex = new string[] { "。", "." };
public bool isSection(string paragraph)
{
if (paragraph.Length > maxSecLength)
return false;
foreach (var ch in ex)
if (paragraph.Contains(ch))
return false;
return true;
}
public void extractCatalog(string txt)
{
int i = 0, num = 0; //i是章節(jié)號;num是章節(jié)位置
foreach (var p in txt.Split("\r\n"))
{
num += p.Length;
if (p.Trim().Length == 0)
continue;
if (!isSection(p))
break;
secs.Add(new Section(i++, p, txt, num));
}
}
其中,isSection用于判斷某個段落是否為目錄,其判斷目錄的方法有兩個,首先文字太長肯定不是目錄,其次,如果出現(xiàn)了句號,也不是標(biāo)題。
extracCatalog表示從txt中提取目錄。由于假定文本文檔以目錄開頭,所以當(dāng)循環(huán)到某一行,當(dāng)其不符合章節(jié)名稱的要求時,就直接退出。
搜索標(biāo)題
相應(yīng)地,直接從文本中挑選目錄從實現(xiàn)上來說更加簡單,但具體識別效果可能會比較差
public void findCatalog(string txt)
{
int i = 0, num = 0; //i是章節(jié)號;num是章節(jié)位置
foreach (var p in txt.Split("\r\n"))
{
num += p.Length;
if (!isSection(p))
break;
secs.Add(new Section(i++, p, num - p.Length));
}
}到此這篇關(guān)于WPF開發(fā)txt閱讀器實現(xiàn)目錄提取功能的文章就介紹到這了,更多相關(guān)WPF閱讀器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#預(yù)定義數(shù)據(jù)類型之值類型和引用類型介紹
這篇文章主要介紹了C#預(yù)定義數(shù)據(jù)類型之值類型和引用類型介紹,本文著重講解了引用類型中的object(對象)類型和string(字符串)類型,需要的朋友可以參考下2015-03-03
C#實現(xiàn)基于XML配置MenuStrip菜單的方法
這篇文章主要介紹了C#實現(xiàn)基于XML配置MenuStrip菜單的方法,涉及C#使用XML配置MenuStrip菜單的原理與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
使用C#實現(xiàn)網(wǎng)頁內(nèi)容保存為圖片并生成壓縮包
這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)網(wǎng)頁內(nèi)容保存為圖片并生成壓縮包,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
unity 如何獲取Text組件里text內(nèi)容的長度
這篇文章主要介紹了unity 獲取Text組件里text內(nèi)容的長度操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
C# 利用ICSharpCode.SharpZipLib實現(xiàn)在線壓縮和解壓縮
本文主要主要介紹了利用ICSharpCode.SharpZipLib第三方的DLL庫實現(xiàn)在線壓縮和解壓縮的功能,并做了相關(guān)的代碼演示。2016-04-04

