Usuário com melhor resposta
Ordenar um Arquivo TXT : Sort()

Pergunta
-
Bom Dia Desenvolvedores!
tenho um arquivo TXT, tabulado.
MARIA 15 CASA
PEDRO 25 PREDIO
JOSE 10 LAJE
Com o código abaixo, eu consigo ordenar começando pela primeira coluna (M, P e J).
Como ordenar pelo coluna de posição, por exemplo, 10 que é onde há os valores numéricos (10,15,25) ?
Exemplo : vArqOrdenado.substring(10,05).Sort(); // Eu sei que não existe isso mas, procuro algo parecido...
var vTodasLinhas = File.ReadLines(@vLetraDriver + vPastaDriver+"\\" +txt_arqent.Text.Trim()); List<string> vArqOrdenado = vTodasLinhas.ToList(); vArqOrdenado.Sort(); using (System.IO.StreamWriter file = new System.IO.StreamWriter(@vLetraDriver + vPastaDriver + "\\ORDENADO.TXT", true)) { foreach (string item in vArqOrdenado) { file.WriteLine(item); } }
Sucesso !!!
Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br
Respostas
-
Você pode usar um Dicionário de dados para guardar cada item com a Key sendo a chave e depois o Linq orderna para você facilmente!
string[] linhas = File.ReadAllLines(".\\Base.txt"); int numero = 0; Dictionary<int, string> items = new Dictionary<int, string>(linhas.Count()); foreach (string linha in linhas) { numero = int.Parse(linha.Substring(10, 6).TrimStart().TrimEnd().Trim()); items.Add(numero, linha); } File.WriteAllLines(".\\BaseOrdenada.txt", items.OrderBy(c => c.Key).Select(c => c.Value).ToArray());
Fulvio C
- Marcado como Resposta Marcos SJ segunda-feira, 16 de maio de 2016 13:59
Todas as Respostas
-
Olá Gilberto,
Você pode criar uma classe que implementa a interface IComparer e criar um método que faz um substring na coluna que você quer ordenar, conforme código abaixo:
class Program { static void Main(string[] args) { List<string> list = new List<string>(); list.Add("MARIA 15 CASA "); list.Add("PEDRO 25 PREDIO "); list.Add("JOSE 10 LAJE "); List<string> listOrderned = Util.Sort(list, 9, 11); foreach (var item in listOrderned) { Console.WriteLine(item); } Console.ReadKey(); } } public class SortItem { public string coluna; public string linha; } public class SortItemComparer : IComparer<SortItem> { public int Compare(SortItem x, SortItem y) { return string.Compare(x.coluna, y.coluna, true); } } public class Util { public static List<string> Sort(List<string> listaTabulada, int posicaoInicialColuna, int posicaoFinalColuna) { List<SortItem> lst = new List<SortItem>(); foreach (var item in listaTabulada) { lst.Add(new SortItem() { coluna = item.Substring(posicaoInicialColuna, posicaoFinalColuna - posicaoInicialColuna), linha = item }); } lst.Sort(new SortItemComparer()); List<string> retListaTabuladaOrdenada = new List<string>(); foreach (var item in lst) { retListaTabuladaOrdenada.Add(item.linha); } return retListaTabuladaOrdenada; } }
Espero ter ajudado.
Abs
-
Você pode usar um Dicionário de dados para guardar cada item com a Key sendo a chave e depois o Linq orderna para você facilmente!
string[] linhas = File.ReadAllLines(".\\Base.txt"); int numero = 0; Dictionary<int, string> items = new Dictionary<int, string>(linhas.Count()); foreach (string linha in linhas) { numero = int.Parse(linha.Substring(10, 6).TrimStart().TrimEnd().Trim()); items.Add(numero, linha); } File.WriteAllLines(".\\BaseOrdenada.txt", items.OrderBy(c => c.Key).Select(c => c.Value).ToArray());
Fulvio C
- Marcado como Resposta Marcos SJ segunda-feira, 16 de maio de 2016 13:59