2013-06-11 2 views
2

У меня есть файл с некоторыми особенностями, но в этом файле в столбце 30 у меня есть число, а не последовательное, 5 цифр, и я хотел бы упорядочить строки этого файла на основе этого numeroação в порядке возрастания.Сортировка содержимого файла на основе содержимого

Например:

sample sample sample1  00094 
sample sample sample2  00001 
sample sample sample3  00032 
sample sample sample4  00491 
sample sample sample5  00002 
sample sample sample6  00010 
sample sample sample7  00007 

Порядковый номер является 00094, 00001 ...

И выход:

sample sample sample2  00001 
sample sample sample5  00002 
sample sample sample7  00007 
sample sample sample6  00010 
sample sample sample3  00032 
sample sample sample1  00094 
sample sample sample4  00491 

Я разработал SITEMA чрезвычайно свинья, где я играть все в списке и делать вид пузыря, тогда мне интересно, есть ли более эффективный способ сделать это, возможно, используя Linq или даже по-другому.

Спасибо за помощь.

+0

'в столбце 30', как эти столбцы разделены? По вкладке? По пространству? –

+0

http://stackoverflow.com/questions/188141/c-sharp-list-orderby-alphabetical-order –

+0

, который находится только в столбце 30, я могу иметь имя в первых 30 столбцах, может использовать все первые 30 столбцов ... – Alexandre

ответ

3
string[] lines = File.ReadAllLines(@"C:\temp\yourFile.txt"); 

var sotedLines = lines.Skip(1) 
         .Take(lines.Length - 2) 
         .OrderBy(getKeyFromLine) 
         .ToArray(); 

sortedLines.ForEach(Console.WriteLine); 

Теперь, если ваши столбцы разделяются пробелом, используйте следующий getKeyFromLine реализации:

Func<string, int> getKeyFromLine = line => int.Parse(line.Split(' ')[30]); 

Если это просто 30 - 35 один на основе индексации цифр в строке, а затем использовать

Func<string, int> getKeyFromLine = line => int.Parse(line.Substring(29, 5)); 
+0

, что можно сделать, чтобы не обрабатывать первую и последнюю строку файла? – Alexandre

+0

@Alexandre обновил мой ответ –

+0

Если это был большой файл, и вы не хотели его читать в памяти, вы можете попробовать что-то вроде 'File.ReadLines (@" C: \ temp \ yourFile.txt) .Skip (1) .Reverse(). Пропустить (1) .Reverse(). OrderBy (getKeyFromLine) ', чтобы содержимое было перечислимым. – neontapir

1

Как насчет:

string[] lines = File.ReadAllLines(@"text.txt"); 
var result = lines.AsParallel() 
    .OrderBy(s => s.Split(' ').Last()) 
    .ToList(); 
+0

Это не пространство, которое разделяет столбцы. По столбцу OP обозначает позицию символа в строке. Ему нужно 30-35 символов. Потребовалось некоторое время, чтобы понять это для меня (см. Комментарии) –

+0

Но цифры по-прежнему остаются последними непространственными символами в каждой строке? –

+0

Я не знаю. Это может быть так, что они не находятся в конце линии. Кроме того, вам нужно заказать буквенно-буквенный формат, но не в алфавитном порядке, поэтому вам, вероятно, также необходимо использовать 'int.Parse' –

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