C#RichTextBox逐行扫描

时间:2015-01-31 01:11:57

标签: c# winforms testing richtextbox

嘿我正在创建自己的编码语言,我已经将整个应用程序设置为save,open,close,new等。

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

对于过去的Java用户来说,这可能是" java-util-scanner,"但更容易用于测试每一行。

有没有人知道这样做的方法,其中一个字符串" scansString"将按如下方式进行测试:

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
}

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

2 个答案:

答案 0 :(得分:0)

要获取RichTextBox的代码行,您可以使用新的行符号拆分内容:

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

线条按外观顺序排列。然后你可以在for或foreach循环中查看行:

foreach (var line in lines)
{
    // access a line, evaluate it, etc.
}

答案 1 :(得分:0)

这样做的一种方法是在换行符上拆分文本,然后解析每行所关注的文本:

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));
}