【问题标题】:Get extracted data to textbox c#将提取的数据提取到文本框c#
【发布时间】:2014-07-01 00:42:09
【问题描述】:

我有一个文本文件,其数据如下

[1] [apple] [market]
[2][toy]asdv[shop]sdvdsrdt

我已经创建了从 [] 中提取数据的代码。

foreach (var line in File.ReadLines(@location))
        {
            IEnumerable<string> str;

            str = line.Split('[').Skip(1)
                .Where(x => x.Contains(']')).Select(x => x.Split(']').First());

            textBox1.Text = textBox1.Text + str.GetEnumerator() + Environment.NewLine;
        }

所以现在我坚持将数据划分为单独的文本框,例如([1] [apple] [market]),我将能够显示数据是单独的文本框。 textbox1 中的值 1,textbox2 中的苹果,textbox3 中的市场。和另一个按钮,它将从文本框中删除数据并显示文本文件中的第二行数据。任何人都可以帮我解决这个问题

【问题讨论】:

  • 您是否有理由尝试将该枚举器用作字符串?还有更多代码吗?除了没有将实际文本放入 textBox1 之外,究竟是什么问题?
  • 其实我是新手,我使用的代码来自互联网。我使用它的原因是因为我只想获取 [] 中的数据并丢弃那些不是的。之后,我想将数据分成不同的文本框。
  • 你在正确的轨道上,但如果你刚刚从这个互联网上得到这个,那么使用 LINQ 会放慢速度。从解析一行开始(就像您正在处理拆分一样)并从那里开始工作。 var words = line.Split('['); // 获取所有单独的单词迭代单词数组并在调试器中查看它以了解它是如何工作的。

标签: c# textbox split


【解决方案1】:

您可以使用正则表达式将行拆分为字符串数组。然后,您可以将值分配给每个文本框。

// Simulate a files content.
var fileLine = new List<string>() { "[1] [apple] [market]", "[2][toy]asdv[shop]sdvdsrdt"};

string[] str   = System.Text.RegularExpressions.Regex.Split(fileLine.FirstOrDefault(), @"\[([^]]+)\]");
TextBox1.Text = str[0];
TextBox2.Text = str[1];
TextBox3.Text = str[2];

当用户单击按钮时,只需重新运行 Regex.Split 即可,但要运行下一行。如果你只有这两行,你可以fileLine.LastOrDefault 否则,你可以创建一个整数来跟踪你所在的索引。

var linesLoaded = new List<string[]>();
// Simulate a files content.
var fileLines = new List<string>() { "[1] [apple] [market]", "[2][toy]asdv[shop]sdvdsrdt"};
foreach (var line in fileLines)
{
    string[] str   = System.Text.RegularExpressions.Regex.Split(fileLine.FirstOrDefault(), @"\[([^]]+)\]");
    linesLoaded.Add(str);
}

加载应用或表单后,将第一个值分配给文本框。

if (!linesLoaded.Any())
{
    return;
}

if (linesLoaded.Count < this.currentIndex)
{
    return;
}

if (!linesLoaded[this.currentIndex].Any() && linesLoaded[this.currentIndex].Count() != 3)
{
    return;
}

TextBox1.Text = linesLoaded.FirstOrDefault()[0];
TextBox2.Text = linesLoaded[0][1];
TextBox3.Text = linesLoaded[0][2];
this.currentIndex = 0; // Save in a field.

然后当用户按下按钮时,您只需重新运行相同的方法,但 this.currentIndex 递增。

this.currentIndex++;

【讨论】:

  • 我已经尝试了代码,但它只显示带有数据的文本框 2,这是错误的数据。数据应该在 textbox1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
相关资源
最近更新 更多