#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.