2013-03-24 3 views
0

Я делаю небольшое приложение C#, и у меня есть небольшая проблема.Пропустить слова/символы при чтении файла

У меня есть .xml с открытым текстом, и мне нужна только четвертая строка.

string filename = "file.xml"; 
if (File.Exists(filename)) 
{ 
    string[] lines = File.ReadAllLines(filename); 
    textBox1.Text += (lines[4]); 
} 

До сих пор все хорошо, моя единственная проблема в том, что я должен удалить из 4-й строки несколько слов и символов.

Мои плохие слова и символы:

word 1 
: 
' 
, 

I'v смотрел на Google, однако я не мог найти что-нибудь для C#. Нашел код для VB, но я новичок в этом, и я действительно не знаю, как его преобразовать и заставить его работать.

Dim crlf$, badChars$, badChars2$, i, tt$ 
    crlf$ = Chr(13) & Chr(10) 
    badChars$ = "\/:*?""<>|"   ' For Testing, no spaces 
    badChars2$ = "\/: * ? "" < > |" ' For Display, has spaces 

    ' Check for bad characters 
For i = 1 To Len(tt$) 
    If InStr(badChars$, Mid(tt$, i, 1)) <> 0 Then 
    temp = MsgBox("A directory name may not contain any of the following" _ 
      & crlf$ & crlf$ & "  " & badChars2$, _ 
      vbOKOnly + vbCritical, _ 
      "Bad Characters") 
    Exit Sub 
    End If 
Next i 

спасибо.

FIXED :)

textBox1.Text += (lines[4] 
       .Replace("Word 1", String.Empty) 
      .Replace(":", String.Empty) 
      .Replace("'", String.Empty) 
      .Replace(",", String.Empty)); 
+0

'string.Replace'? – Matten

+1

Если ваш файл XML, вы ** действительно, действительно ** должны анализировать его как XML. Попробуйте 'XDocument.Load'. – driis

+0

Проверка string.Replace, Спасибо. --- Содержимое для XML взято из WEB, сценария JS. – rgerculy

ответ

2

Вы могли бы заменить их ничем:

textBox1.Text += lines[4].Replace("word 1 ", string.Empty) 
         .Replace(":", string.Empty) 
         .Replace("'", string.Empty) 
         .Replace(",", string.Empty); 

Или, возможно, создать массив выражений, которые вы хотите удалить, и заменить их на все.

string[] wordsToBeRemoved = { "word 1", ":", "'", "," }; 

string result = lines[4]; 
foreach (string toBeRemoved in wordsToBeRemoved) { 
    result = result.Replace(toBeRemoved, string.Empty); 
} 
textBox1.Text += result; 
+0

исправлено :) спасибо. – rgerculy

+0

Есть ли способ удалить место? – rgerculy

+0

@rgerculy Конечно, просто добавьте '' '' в 'wordsToBeRemoved'. – antonijn

1

Вы можете использовать String.Replace заменить их ничем:

textBox1.Text += (lines[4] 
      .Replace("Word 1", String.Empty) 
      .Replace(":", String.Empty) 
      .Replace("'", String.Empty) 
      .Replace(",", String.Empty)); 
+0

Спасибо! Work'd :) – rgerculy

0

Ребята дали хорошие решения, я просто хочу, чтобы добавить еще один быстрый (с помощью StringBuilder) и удобно (используя синтаксис метода расширения и params как значения) решение

public static string RemoveStrings(this string str, params string[] strsToRemove) 
{ 
    var builder = new StringBuilder(str); 
    strsToRemove.ToList().ForEach(v => builder.Replace(v, "")); 
    return builder.ToString(); 
} 

теперь вы можете

string[] lines = File.ReadAllLines(filename); 
textBox1.Text += lines[4].RemoveStrings("word 1", ":", "'", ","); 
+0

Спасибо за ваш ответ, но я хочу, чтобы что-то действительно просто понять, я тоже :) – rgerculy

+0

@rgerculy Есть 3 коротких строки кода в реализации метода, насколько проще вы можете получить? –

+0

True ... но вторая строка «strsToRemove.ToList(). ForEach (v => builder.Replace (v," "));" меня сбивает с толку. Я новичок, и мне нужно многому научиться. – rgerculy

Смежные вопросы