Получить извлеченные данные в текстовое поле c#

#c# #textbox #split

#c# #текстовое поле #разделить

Вопрос:

У меня есть текстовый файл, в котором есть данные, как показано ниже

 [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]), я мог бы показать, что данные являются отдельным текстовым полем. значение 1 в текстовом поле 1, apple в текстовом поле 2, market в текстовом поле 3. и еще одна кнопка, которая удалит данные из текстового поля и покажет вторую строку данных в текстовом файле. может ли какой-либо орган помочь мне с этим

Комментарии:

1. Есть ли причина, по которой вы пытаетесь использовать этот перечислитель как строку? Есть ли еще код? В чем именно проблема, кроме того, что фактический текст не помещается в TextBox1?

2. на самом деле я новичок в этом, и код, который я использую, взят из Интернета. причина, по которой я это использую, заключается в том, что я хочу получить только данные внутри [] и отбросить те, которые нет. после этого я хочу разделить данные в другое текстовое поле.

3. Вы на правильном пути, но притормозите с LINQ, если вы только что получили это из этого Интернета. Начните с синтаксического анализа одной строки (как вы делаете с разделением) и работайте оттуда. var words = строка. Split(‘[‘); // Получаем все отдельные слова, перебираем массив words и смотрим на него в отладчике, чтобы узнать, как это работает.

Ответ №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() amp;amp; 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  ;
  

Комментарии:

1. я попробовал код, но он показывает только текстовое поле 2 с данными, и это неправильные данные. данные должны были находиться в textbox1.