#c# #forms #file-io
#c# #формы #file-io
Вопрос:
У меня есть очень большой текстовый файл (более 35 000 строк информации), и я хотел бы извлечь из него определенные строки и поместить их в другой текстовый файл.
Текстовый файл выглядит следующим образом:
Feature info
Feature name: 123456
Version: 1
Tokens total: 35
Tokens remaining: 10
И я хотел бы извлечь имя функции и общее количество токенов. Я имел в виду форму с двумя кнопками: 1 для просмотра файла, а другая для выполнения всего чтения и записи в файл, конечно, в том же построчном формате.
У кого-нибудь есть какие-либо подсказки о том, как это сделать? Я искал, и я действительно не нашел конкретных вещей, также довольно новых для чтения / записи файлов…
Редактировать
Хорошо, вот что у меня есть до сих пор, и это работает:
private void button1_Click(object sender, EventArgs e)
{
int counter = 0;
string line;
string s1 = "Feature name";
string s2 = "Tokens total";
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("d:\license.txt");
using (System.IO.StreamWriter file2 = new System.IO.StreamWriter(@"D:test.txt"))
while ((line = file.ReadLine()) != null)
{
if (line.Contains(s1) || line.Contains(s2))
{
file2.WriteLine(line);
counter ;
}
}
file.Close();
И это делается с помощью одной кнопки. Однако я хочу иметь возможность искать нужный мне файл, а затем использовать другую кнопку, чтобы выполнить весь процесс записи
Комментарии:
1.
I have searched and I haven't really found specific things
Я сомневаюсь, что2. Изучите
File.ReadLines()
иstring.StartsWith()
3. Поиск классов StreamReader и StreamWriter в c #. Остальное — это чтение построчно и некоторые строковые операции для извлечения того, что вам нужно.
4. Используйте
File.Readlines()
, а затем выполните поиск нужного слова следующимstring.StartsWith()
образом, затем добавьте строку в массив и поместите массив в текстовую область.5. Спасибо, ребята! Это помогло
Ответ №1:
Ответ на РЕДАКТИРОВАНИЕ:
Вы можете сохранить прочитанные данные в свойстве или частном поле в классе form. Предпочтительно использовать String или StringBuilder. При нажатии второй кнопки проверьте, есть ли сохраненные данные, и запишите их в выходной файл.
private StringBuilder data = new StringBuilder();
private void button2_Click(object sender, EventArgs e)
{
if(data.Length > 0)
{
using(System.IO.StreamWriter file2 = new System.IO.StreamWriter(@"D:test.txt"))
{
file2.Write(data.ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
// Clear the previous store data
data.Clear();
// ...
System.IO.StreamReader file = new System.IO.StreamReader("d:\license.txt");
while ((line = file.ReadLine()) != null)
{
if (line.Contains(s1) || line.Contains(s2))
{
sb.AppendLine(line);
counter ;
}
}
file.Close();
}
Пожалуйста, добавьте использование для системы.Ввод-вывод и окружите ваш StreamReader и StreamWriter с помощью блока using, чтобы ваш код был более читабельным, и вы не забудете освободить используемые ресурсы.
Комментарии:
1. Спасибо за ваш ответ. Удалось сделать из этого что-то хорошее!
Ответ №2:
Вы можете использовать StreamReader и StreamWriter для чтения / записи файлов
Для извлечения определенной части текста вы можете использовать регулярное выражение.Совпадения, он вернет совпадение, затем вы можете получить определенную группу в Match.Groups
// Search name
Match mu = Regex.Match(line, @"Feature name: (d )");
// Get name
if (mu.Groups.Count == 1) Console.Writeline(mu.Groups[0].Value);