Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将richTextBox文本加载到数组中_C#_.net_Visual Studio - Fatal编程技术网

C# 将richTextBox文本加载到数组中

C# 将richTextBox文本加载到数组中,c#,.net,visual-studio,C#,.net,Visual Studio,我有一个问题,因为我刚刚开始学习C 我有一个这样定义的类: public class Piksel { public int r; public int g; public int b; } 然后我声明一个数组,如下所示: Piksel[,] tab2 = new Piksel[32, 32]; 现在,我有一个*.txt文件,格式如下: ... X: 15 , Y: 2 , R: 255 , G: 255 , B: 255

我有一个问题,因为我刚刚开始学习C

我有一个这样定义的类:

public class Piksel
    {
        public int r;
        public int g;
        public int b;
    }
然后我声明一个数组,如下所示:

Piksel[,] tab2 = new Piksel[32, 32];
现在,我有一个*.txt文件,格式如下:

...

X: 15 , Y: 2 , R: 255 , G: 255 , B: 255

X: 16 , Y: 2 , R: 183 , G: 183 , B: 183

X: 17 , Y: 2 , R: 32 , G: 32 , B: 32

X: 18 , Y: 2 , R: 32 , G: 32 , B: 32

X: 19 , Y: 2 , R: 159 , G: 159 , B: 159

X: 20 , Y: 2 , R: 255 , G: 255 , B: 255

...
我将其加载到richTextBox中:

 OpenFileDialog openF1 = new OpenFileDialog();
        openF1.InitialDirectory = "C:\\Users\\Nagash\\Desktop";
        openF1.Title = "Wybierz plik z danymi obrazka";
        openF1.DefaultExt = "*txt";
        openF1.Filter = "Pliki TXT|*txt";

        if (openF1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openF1.FileName.Length > 0)
        {
            richTextBox3.LoadFile(openF1.FileName,RichTextBoxStreamType.PlainText);
        }
现在我的问题是:如何从richTextBox将数据放入tab2数组中。例如,如果richTextBox中的一行读取

X: 15 , Y: 2 , R: 255 , G: 255 , B: 255
那么我想要的是以下结果:

tab2[15,2].r=255 tab[15,2].g=255 tab[15,2].b=255
我像这样摆弄正则表达式:

MatchCollection mc = Regex.Matches(richTextBox3.Text, "[0-9]+");
        foreach (Match str in mc)
            richTextBox1.Text= richTextBox1.Text + Convert.ToString(str);
但我不知道如何分辨一个数字是255还是25加5。还不确定如何将其放入阵列中


谢谢您的帮助。

您好,您可以这样保存文件:

15,22555255

并使用此函数来分隔值:

  static  IEnumerable<string> LineSplitter(string line)
        {
            int fieldStart = 0;
            for (int i = 0; i < line.Length; i++)
            {
                if (line[i] == ',')
                {
                    yield return line.Substring(fieldStart, i - fieldStart);
                    fieldStart = i + 1;
                }
                if (line[i] == '"')
                    for (i++; line[i] != '"'; i++) { }
            }

        }
静态IEnumerable行拆分器(字符串行)
{
int fieldStart=0;
for(int i=0;i
这将您的问题归结为如何解析以下形式的行

X: 15 , Y: 2 , R: 255 , G: 255 , B: 255
将每个X、Y、R、G和B的值放入字典中。这可能是应用正则表达式的正确位置。或者再次使用
Split

private Dictionary<string, int> Parse(string row)
{
    var keysAndValues= row.Split(',');
    var dict = new Dictionary<string, int>();

    foreach (var keyValue in keysAndValues)
    {
        var parts = value.Split(':');
        var key = parts[0];
        var value = int.Parse(parts[1]);

        dict[key] = value;
    }

    return dict;
}
专用字典解析(字符串行)
{
var keysAndValues=row.Split(',');
var dict=新字典();
foreach(keysAndValues中的var keyValue)
{
var parts=value.Split(“:”);
var键=零件[0];
var值=int.Parse(部分[1]);
dict[键]=值;
}
返回命令;
}

您好,谢谢您的回答。然而,我需要我的文本文件的格式,包括字母和“:”。有没有办法重写您提供的包含该格式的函数?是的,因为您可以看到字符串中的每个字符都被选中,所以您可以重写它。看一看:嘿,谢谢您的精彩解释。我不会通过将文本放入rTB来“赢得”任何东西,这只是我为我的类所做的一个程序,其中一个要求是将txt文件加载到rTB中,所以我想知道为什么不在做其他事情的同时再做它。我现在还不太理解你的代码,但我会阅读你使用的命令。再次感谢。@user3706568-明白了。只需一个问题,代码中的r是什么,一个变量?如果是的话,哪一个?@NagashTDN:
r=>Parse(r)
是一个。它使用一个名为
r
的参数定义函数,该参数是“行”的缩写。类型
string
是自动推断的,因为您对字符串集合执行
Select
Select
遍历字符串数组(即文本行),并为每一行调用
Parse
,将该行作为参数传递。
private Dictionary<string, int> Parse(string row)
{
    var keysAndValues= row.Split(',');
    var dict = new Dictionary<string, int>();

    foreach (var keyValue in keysAndValues)
    {
        var parts = value.Split(':');
        var key = parts[0];
        var value = int.Parse(parts[1]);

        dict[key] = value;
    }

    return dict;
}