2016-01-06 1 views
2

Недавно я узнал TextFieldParser, чтобы разобрать words, где раньше я использовал бы string.Split. И у меня есть вопрос относительно недавно полученного class.StringSplitOptions.RemoveEmptyEntries эквивалент для TextFieldParser

Если разобрать такое сообщение, используя string.Split с StringSplitOptions.RemoveEmptyEntries

string message = "create myclass \"56, 'for better or worse'\""; //have multiple spaces 
string[] words = message.Split(new char[] { ' ' }, 3, StringSplitOptions.RemoveEmptyEntries); 

Тогда мы получим words, которые содержат три элемента, как это:

[0] create 
[1] myclass 
[2] "56, 'for better or worse'" 

Но если мы делаем это с TextFieldParser

string str = "create myclass \"56, 'for the better or worse'\""; 
var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(str)); //treat string as I/O 
parser.Delimiters = new string[] { " " }; 
parser.HasFieldsEnclosedInQuotes = true; 
string[] words2 = parser.ReadFields(); 

Тогда return будет состоять из некоторого words без текста

[0] create 
[1] 
[2] 
[3] 
[4] myclass 
[5] 
[6] 
[7] "56, 'for better or worse'" 

Теперь есть эквивалентный способ удаления в результате массив пустой words, как string.SplitStringSplitOptions.RemoveEmptyEntries делает?

+0

Это не похоже, как CSV. Почему вы хотите использовать [гораздо медленнее] (http://stackoverflow.com/a/20456597/2316200) VB6 TextFieldParser вместо String.Split или Regex? –

+0

@ Pierre-LucPineault Я не знаю, обычно ли это используется для (только для) CSV-текста, сэр. Но в моем предыдущем вопросе два хорошо известных человека предлагают мне использовать это для анализа моего текста и с лучшей производительностью, о которой они говорили. Поскольку я новичок, я доверял их суждению и использовал это. Вот сообщение: http://stackoverflow.com/questions/34607051/parse-string-with-whitespace-and-quotation-mark Я был бы рад, если бы вы могли дать альтернативный взгляд – Ian

+0

@ Pierre-LucPineault Я открыл ссылку, которая вы дали и прочитали разницу во времени! Как это может быть! См. Ссылку, которую я даю. Мнение там совсем другое. – Ian

ответ

1

Может быть, это будет делать трюк

parser.HasFieldsEnclosedInQuotes = true; 
string[] words2 = parser.ReadFields(); 
words2 = words2.Where(x => !string.IsNullOrEmpty(x)).ToArray(); 

Один лайнер Альтернатива может быть

string[] words2 = parser.ReadFields().Where(x => !string.IsNullOrEmpty(x)).ToArray(); 
+0

Спасибо за ваш быстрый ответ, сэр. Но это, похоже, не работает. Я получаю идею, которую я мог бы использовать 'LINQ'. – Ian

+0

Я бы удалил обрезку и использовал! String.IsNullOrWhiteSpace (tag) –

+0

@MohitShrivastava Спасибо, это хорошо работает. – Ian

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

  • Нет связанных вопросов^_^