#c# #.net
#c# #.net
Вопрос:
Я использую программу StreamReader для открытия текстового файла и извлечения его содержимого. Мне нужно взять только текст из файла без каких-либо управляющих символов (n, r, » и т.д.). Google подводит меня прямо сейчас. Есть идеи?
Ответ №1:
В тексте, который вы читаете из файла, нет escape-символов. Escape-символы используются при написании строкового литерала, например, в программном коде. Я предполагаю, что вы имеете в виду, что хотите заменить любые символы пробела при записи простыми пробелами.
Вы можете использовать регулярное выражение для сопоставления символов пробела и замены их пробелами. Для чтения текста из файла проще использовать File.ReadAllText
:
string text = Regex.Replace(File.ReadAllText(fileName), @"[rnt ] ", " ");
Ответ №2:
Почему бы вам просто не вызвать, ReadToEnd
а затем Split
строку?
// using statement and whatever code here
var rawContent = sr.ReadToEnd();
var usefulContent = rawContent.Split(new []{ "rn", "\" },
StringSplitOptions.RemoveEmptyEntries);
Примечание: вы захотите настроить разделители в Split
методе; это всего лишь пример.
Вы также могли бы просто Replace
удалить ненужные символы:
// using statement and whatever code here
var rawContent = sr.ReadToEnd();
var usefulContent = rawContent
.Replace("rn", "" )
.Replace("\", "");
Ответ №3:
Если вы пытаетесь сделать это во время потоковой передачи, вызовите StreamReader.Read() в цикле while и протестируйте символы один за другим.
Если вы можете преобразовать все содержимое файла в строку, используйте регулярное выражение для удаления нежелательных символов. Проверьте RegexHero:http://regexhero.net/tester /
Ответ №4:
Предположим, вы прочитали весь файл в виде строки s
for (int i = 0; i < s.Length; i )
{
if (char.IsLetterOrDigit(s, i)) // or if (!char.IsWhiteSpace(s, i))
{
// append to StringBuilder
}
}
Если IsLetterOrDigit или IsWhiteSpace не соответствуют вашим потребностям, вы можете создать свой собственный метод и вызвать его.
Ответ №5:
Вы можете использовать универсальную функцию для пропуска всех ненужных символов:
public string SkipChars(string InputString, char[] CharsToSkip)
{
string result = InputString;
foreach (var chr in CharsToSkip)
{
result = result.Replace(chr.ToString(), "");
}
return resu<
}
использование:
string test = "onentwotthree";
MessageBox.Show(SkipChars(test, new char[] { 'n', 't' }));