C# RichTextBox 逐行扫描

Posted

技术标签:

【中文标题】C# RichTextBox 逐行扫描【英文标题】:C# RichTextBox Line-by-line scan 【发布时间】:2015-01-31 01:11:56 【问题描述】:

嘿,我正在创建自己的编码语言,我已经设置了整个应用程序,包括保存、打开、关闭、新建等。

为了让“运行”部分工作,我需要一种方法来扫描和测试richTextBox1 中的每一行。

也许对于过去的 Java 用户来说,类似于“java-util-scanner”,但更容易用于测试每一行。

有谁知道这样做的方法,字符串“scannedString”会被这样测试:

if(scannedString == "#load(moduleFiles)") 
    //action here

string scannedStringNextLine = ???
if(scannedStringNextLine = "") 
    //action here

最终它会看起来更像这样:

if(scannedString == "code1" || scannedString == "code2" etc... ) 
    if(scannedString == "code1") 
        //action here
    
 else 
    //error message

希望这是足够的信息...

【问题讨论】:

如果您想创建自己的语言,您应该研究标记化。像这样比较字符串非常脆弱(空格和区分大小写等) 是WinForms还是WPF富文本框? 它在 Windows 窗体中,是的。另外,我用 Java 完成了这个编码,它很脆弱,但我有一些想法。我只是需要克服这个... 【参考方案1】:

要获取RichTextBox 的代码行,您可以用换行符分割内容:

var lines = this.richTextBox.Text.Split('\n').ToList();

线条按出现顺序排列。然后你可以遍历 for 或 foreach 循环中的行:

foreach (var line in lines)

    // access a line, evaluate it, etc.

【讨论】:

【参考方案2】:

一种方法是在换行符上拆分文本,然后解析每一行以获得您关心的文本:

private void btnScan_Click(object sender, EventArgs e)

    var code = richTextBox1.Text;

    foreach (var line in code.Split(new []'\n','\r', 
        StringSplitOptions.RemoveEmptyEntries))
    
        CheckForLoad(line);
    


void CheckForLoad(string line)

    if (string.IsNullOrWhiteSpace(line)) return;

    int i = line.IndexOf("#load");
    if (i < 0) return;

    int openParen = line.IndexOf("(", i + 1);
    if (openParen < 0) return;

    int closeParen = line.IndexOf(")", openParen + 1);
    if (closeParen < 0) return;

    string modules = line.Substring(openParen + 1, closeParen - openParen - 1);

    MessageBox.Show(string.Format("Loading modules: 0", modules));

【讨论】:

以上是关于C# RichTextBox 逐行扫描的主要内容,如果未能解决你的问题,请参考以下文章

在C#中,怎么调整textbox中的文字行间距

求救,C#富文本框显示异常!

从richtextbox逐行读取并显示在标签中(vb.net)

转发控件的所有属性

C# richtextbox 添加一行彩色文字

使用 Alt-Left-Mouse 扫描在 RichTextBox 中进行矩形选择?