亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

目錄類(lèi)

目錄是由標(biāo)題組成,而標(biāo)題往往包括章節(jié)序號(hào)以及標(biāo)題名稱(chēng),而對(duì)于一個(gè)文本文件來(lái)說(shuō),如果想實(shí)現(xiàn)點(diǎn)擊目錄實(shí)現(xiàn)跳轉(zhuǎn),則又必須包含該標(biāo)題在正文中出現(xiàn)的位置。所以,在新建目錄之前,首先應(yīng)該新建一個(gè)章節(jié)類(lèi)。

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)的第一個(gè)位置,st為開(kāi)始搜索的字符串位置。

有了章節(jié)之后,就可以創(chuàng)建目錄了,簡(jiǎn)單地來(lái)說(shuō),目錄就是章節(jié)列表,但除此之外,還需要有生成目錄的方法,其大致內(nèi)容如下

class Catalog
{
    public List<Section> sections;
    public Catalog(string txt, bool withCatalog)
    {
???????    }
}

提取標(biāo)題

一般來(lái)說(shuō),txt中并不包含目錄信息,所謂生成目錄,無(wú)非是從文本文檔中提取標(biāo)題,所以需要分析標(biāo)題的特點(diǎn)。

此外,有一些文本文檔會(huì)在正文之前列出目錄,這種可以把目錄提取出來(lái)之后,再?gòu)奈臋n中查找相應(yīng)的章節(jié),相對(duì)來(lái)說(shuō)會(huì)更加方便,考慮到先易后難的原則,首先實(shí)現(xiàn)這種目錄生成邏輯,在Catalog類(lèi)的構(gòu)造函數(shù)中,當(dāng)withCatalog為true時(shí),表示這種情況,下面是具體實(shí)現(xiàn)方法

public int maxSecLength = 30;       // 標(biāo)題最長(zhǎng)字?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é)號(hào);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用于判斷某個(gè)段落是否為目錄,其判斷目錄的方法有兩個(gè),首先文字太長(zhǎng)肯定不是目錄,其次,如果出現(xiàn)了句號(hào),也不是標(biāo)題。

extracCatalog表示從txt中提取目錄。由于假定文本文檔以目錄開(kāi)頭,所以當(dāng)循環(huán)到某一行,當(dāng)其不符合章節(jié)名稱(chēng)的要求時(shí),就直接退出。

搜索標(biāo)題

相應(yīng)地,直接從文本中挑選目錄從實(shí)現(xiàn)上來(lái)說(shuō)更加簡(jiǎn)單,但具體識(shí)別效果可能會(huì)比較差

public void findCatalog(string txt)
{
    int i = 0, num = 0;     //i是章節(jié)號(hào);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開(kāi)發(fā)txt閱讀器實(shí)現(xiàn)目錄提取功能的文章就介紹到這了,更多相關(guān)WPF閱讀器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#預(yù)定義數(shù)據(jù)類(lèi)型之值類(lèi)型和引用類(lèi)型介紹

    C#預(yù)定義數(shù)據(jù)類(lèi)型之值類(lèi)型和引用類(lèi)型介紹

    這篇文章主要介紹了C#預(yù)定義數(shù)據(jù)類(lèi)型之值類(lèi)型和引用類(lèi)型介紹,本文著重講解了引用類(lèi)型中的object(對(duì)象)類(lèi)型和string(字符串)類(lèi)型,需要的朋友可以參考下
    2015-03-03
  • C#實(shí)現(xiàn)合并及拆分PDF文件的方法

    C#實(shí)現(xiàn)合并及拆分PDF文件的方法

    這篇文章主要為大家詳細(xì)介紹了C#合并及拆分PDF文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C#文件內(nèi)容檢索的功能實(shí)現(xiàn)代碼

    C#文件內(nèi)容檢索的功能實(shí)現(xiàn)代碼

    本文詳細(xì)介紹了如何構(gòu)建和優(yōu)化一個(gè)高效的文件內(nèi)容檢索系統(tǒng),包括索引構(gòu)建、多線程處理、文件監(jiān)控、搜索優(yōu)化、錯(cuò)誤處理和日志記錄等方面的內(nèi)容,并提供了一個(gè)簡(jiǎn)化的C#demo示例,感興趣的朋友一起看看吧
    2024-10-10
  • 總結(jié)的5個(gè)C#字符串操作方法分享

    總結(jié)的5個(gè)C#字符串操作方法分享

    這篇文章主要介紹了總結(jié)的5個(gè)C#字符串操作方法分享,本文講解了把字符串按照分隔符轉(zhuǎn)換成 List、把字符串轉(zhuǎn) 按照, 分割 換為數(shù)據(jù)、得到數(shù)組列表以逗號(hào)分隔的字符串、得到字符串長(zhǎng)度等方法,需要的朋友可以參考下
    2015-05-05
  • C#實(shí)現(xiàn)基于XML配置MenuStrip菜單的方法

    C#實(shí)現(xiàn)基于XML配置MenuStrip菜單的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)基于XML配置MenuStrip菜單的方法,涉及C#使用XML配置MenuStrip菜單的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 使用C#實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容保存為圖片并生成壓縮包

    使用C#實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容保存為圖片并生成壓縮包

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容保存為圖片并生成壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 基于C#實(shí)現(xiàn)簡(jiǎn)單的音樂(lè)播放器

    基于C#實(shí)現(xiàn)簡(jiǎn)單的音樂(lè)播放器

    這篇文章主要介紹了如何基于C#實(shí)現(xiàn)簡(jiǎn)單的音樂(lè)播放器,考慮到需求中的界面友好和跨版本兼容性,我們可以選擇選擇Windows Forms作為開(kāi)發(fā)平臺(tái),Windows Forms提供了一個(gè)簡(jiǎn)單而強(qiáng)大的方法來(lái)創(chuàng)建桌面應(yīng)用程序,文中通過(guò)代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • unity 如何獲取Text組件里text內(nèi)容的長(zhǎng)度

    unity 如何獲取Text組件里text內(nèi)容的長(zhǎng)度

    這篇文章主要介紹了unity 獲取Text組件里text內(nèi)容的長(zhǎng)度操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C# 利用ICSharpCode.SharpZipLib實(shí)現(xiàn)在線壓縮和解壓縮

    C# 利用ICSharpCode.SharpZipLib實(shí)現(xiàn)在線壓縮和解壓縮

    本文主要主要介紹了利用ICSharpCode.SharpZipLib第三方的DLL庫(kù)實(shí)現(xiàn)在線壓縮和解壓縮的功能,并做了相關(guān)的代碼演示。
    2016-04-04
  • C#實(shí)現(xiàn)坦克大戰(zhàn)游戲

    C#實(shí)現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評(píng)論