while (Reader.Peek() > 0)
{
line = Reader.ReadLine();
if (line.StartsWith ("\n\r")==false)
{
richTextBox1.AppendText(line);
richTextBox1.AppendText("\n");
}
}
Работаю со строками. Поиск подстроки. C#
У меня есть файл следующего содержания:
Цитата:
1
00:00:45,278 --> 00:00:48,213
Why are you late?
You're not going to
like the answer.
2
00:00:48,281 --> 00:00:50,647
I already know the answer.
I missed the bus.
3
00:00:50,717 --> 00:00:53,652
I don't doubt it.
No bus stops near Brad's.
Я хочу его отпарсить следующим образом: убрать пустую строку перед цифрами 2 и 3.
Вот как я рассуждаю: раз там пустая строка, значит там стоят два символа "CR" и "LF", что значит "перевод каретки" и "переход на новую строку". В C# это пара символов "\r\n". Но когда я пишу следующий код:
Код:
ничего не выходит. Метод StartsWith (S) возвращает true если текущая строка начинается со строки S.
В чем дело?
Как убрать пустую строку?
Читайте документацию по файлам. Если вы хотите обрабатывать управляющие символы, то вам нужно открыть файл как нетипизированый, а вы его открываете как текстовый. При обработке текстового фала, управляющие символы игнорируются.
Вот пример:
Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApplication17 {
class Program {
static Regex regex = new Regex(@"\d+(\n|\r\n)\d{2}:\d{2}:\d{2},\d+\040*-->\040*\d{2}:\d{2}:\d{2},\d+(\n|\r\n)([a-z0-9_\040'\?\!\.]+(\n|\r\n))*[a-z0-9_\040'\?\!\.]+",
RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);
const string test_input =
@"1
00:00:45,278 --> 00:00:48,213
Why are you late?
You're not going to
like the answer.
2
00:00:48,281 --> 00:00:50,647
I already know the answer.
I missed the bus.
3
00:00:50,717 --> 00:00:53,652
I don't doubt it.
No bus stops near Brad's. ";
static void Main(string[] args) {
foreach (Match m in regex.Matches(test_input)) {
Console.WriteLine(m.Value);
}
Console.ReadLine();
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApplication17 {
class Program {
static Regex regex = new Regex(@"\d+(\n|\r\n)\d{2}:\d{2}:\d{2},\d+\040*-->\040*\d{2}:\d{2}:\d{2},\d+(\n|\r\n)([a-z0-9_\040'\?\!\.]+(\n|\r\n))*[a-z0-9_\040'\?\!\.]+",
RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);
const string test_input =
@"1
00:00:45,278 --> 00:00:48,213
Why are you late?
You're not going to
like the answer.
2
00:00:48,281 --> 00:00:50,647
I already know the answer.
I missed the bus.
3
00:00:50,717 --> 00:00:53,652
I don't doubt it.
No bus stops near Brad's. ";
static void Main(string[] args) {
foreach (Match m in regex.Matches(test_input)) {
Console.WriteLine(m.Value);
}
Console.ReadLine();
}
}
}
Конечно, нужно тестировать. :)
Код:
if (line.Length > 0)
{
richTextBox1.AppendText(line);
richTextBox1.AppendText("\n");
}
{
richTextBox1.AppendText(line);
richTextBox1.AppendText("\n");
}
Хотя понимаю, что после регулярок - уже не то... :D
Цитата: Der Meister
Простите, а
?
Хотя понимаю, что после регулярок - уже не то... :D
Код:
if (line.Length > 0)
{
richTextBox1.AppendText(line);
richTextBox1.AppendText("\n");
}
{
richTextBox1.AppendText(line);
richTextBox1.AppendText("\n");
}
Хотя понимаю, что после регулярок - уже не то... :D
Собсна так и сделал тогда=)