Чтение из файла без специальных символов

#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' }));