最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF開發(fā)txt閱讀器實現(xiàn)目錄提取功能

 更新時間:2023年06月06日 09:27:37   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了WPF開發(fā)txt閱讀器時如何實現(xiàn)目錄提取功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

目錄類

目錄是由標(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)題最長字?jǐn)?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#多線程學(xué)習(xí)之Thread、ThreadPool、Task、Parallel四者區(qū)別

    C#多線程學(xué)習(xí)之Thread、ThreadPool、Task、Parallel四者區(qū)別

    這篇文章主要以一些簡單的小例子,簡述多線程的發(fā)展歷程:Thread,ThreadPool,Task,Parallel。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#多線程有一定幫助,需要的朋友可以參考一下
    2021-12-12
  • c# winform異步不卡界面的實現(xiàn)方法

    c# winform異步不卡界面的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于c# winform異步不卡界面的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C# TreeView從數(shù)據(jù)庫綁定數(shù)據(jù)的示例

    C# TreeView從數(shù)據(jù)庫綁定數(shù)據(jù)的示例

    這篇文章主要介紹了C# TreeView從數(shù)據(jù)庫綁定數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#實現(xiàn)系統(tǒng)托盤通知的方法

    C#實現(xiàn)系統(tǒng)托盤通知的方法

    這篇文章主要介紹了C#實現(xiàn)系統(tǒng)托盤通知的方法,涉及C#系統(tǒng)api調(diào)用的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程(上)

    深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程(上)

    這篇文章主要介紹了如何學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程的相關(guān)知識,文中講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#實現(xiàn)歸并排序

    C#實現(xiàn)歸并排序

    這篇文章介紹了C#實現(xiàn)歸并排序的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#中Path類的使用方法

    C#中Path類的使用方法

    這篇文章主要介紹了C#中Path類的使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 使用C#實現(xiàn)Excel與DataTable互轉(zhuǎn)的方案

    使用C#實現(xiàn)Excel與DataTable互轉(zhuǎn)的方案

    在企業(yè)級開發(fā)中,Excel文件與DataTable(數(shù)據(jù)表)的互轉(zhuǎn)是報表生成、數(shù)據(jù)遷移等場景的核心需求,傳統(tǒng)方案如OleDb或Office Interop存在內(nèi)存泄漏、性能低下等問題,且依賴本地Office組件,所以本文給大家介紹了使用C#實現(xiàn)Excel與DataTable互轉(zhuǎn)的方案,需要的朋友可以參考下
    2025-08-08
  • 經(jīng)典排序算法之冒泡排序(Bubble sort)代碼

    經(jīng)典排序算法之冒泡排序(Bubble sort)代碼

    這篇文章主要介紹了經(jīng)典排序算法之冒泡排序(Bubble sort)代碼的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 在C#中實現(xiàn)文本與Word文檔互相轉(zhuǎn)換的操作步驟

    在C#中實現(xiàn)文本與Word文檔互相轉(zhuǎn)換的操作步驟

    在現(xiàn)代軟件開發(fā)中,處理文檔內(nèi)容是一個非常常見的需求,無論是生成報告、存儲日志,還是處理用戶輸入,開發(fā)者都可能需要在純文本與 Word 文檔之間進(jìn)行轉(zhuǎn)換,所以本文給大家介紹了如何在 C# 中將文本轉(zhuǎn)換為 Word 以及將 Word 轉(zhuǎn)換為文本,需要的朋友可以參考下
    2025-09-09

最新評論

南靖县| 文安县| 阳信县| 铜川市| 徐汇区| 舞钢市| 大冶市| 绵竹市| 瑞丽市| 中江县| 五大连池市| 淮滨县| 始兴县| 绥宁县| 肥东县| 建昌县| 湟中县| 兴宁市| 文化| 南宁市| 灯塔市| 宜兰县| 炉霍县| 余姚市| 滦南县| 临沭县| 民乐县| 彭水| 固安县| 望奎县| 浙江省| 宁陵县| 佳木斯市| 余干县| 龙泉市| 衢州市| 铁岭市| 麻江县| 连州市| 衡水市| 双鸭山市|