Usuário com melhor resposta
Problema ler linha a linha string

Pergunta
-
Boa Tarde Pessoal,
Estou com a seguinte dificuldade, preciso ler uma string linha a linha. Até consigo ler, mas preciso resolver algumas "particularidades".
Quando o primeiro caracter da linha é "0", quer dizer que é um novo registro, e quando se inicia em "1, 2 e 3", são características referente à aquela Nota.
Estou tendo dificuldade ao percorrer linha a linha, "contar" quantos registros "2" ou "3" há dentro dessa Nota, ou seja, quando chegar no próximo 0, ele parar de percorrer.
01780B102765517835125003368214150616A22240157814U0F9BD57814UGB102765 000000006193222874770D01188738000197 D1039D21-37EB-48C3-8F50-0B26F070F2CA000001 10000004337141000000368113000000002944900000004337142000000052045700000000000000000000000000310A2011*2874770*00000000000 000002 2FIAT/STRADA WORKING 02 PASSAGEIROS 000003 2004 CILINDROS - 0 KM FAB 2016 MOD-2016 000004 2 COR-PRATA BARI 000005 2REV-TECIDO MAMBO 000006 37ME-KIT CELEBRATION 2 210-PINTURA METALICA 000007 019703308764517828021003368956150616A15303119716T0F9BD19716TG3308764TTAXI 000000002491262993730D10621458600 000008 10000003493118000000324534600000000000000000000000000000000000000000000000000000000000000000310A5011*2993730*00000000000 000009 2FIAT/SIENA ESSENCE 1.6.4 05 PASSAGEIROS 000010 2004 CILINDROS - 0 KM FAB 2016 MOD-2016 000011 2 COR-BRANCO BANCHISA 000012 2REV-MALHA SPACER ARCO+MALHA ALAG U 000013
Respostas
-
Voce pode Quebrar cada linha de sua string com uma função jogando para List<string>, uma que que seu tamanho é fixo com 164 caracteres assim
public List<string> quebraLinha(string Texto) { List<string> ListTexto = new List<string>(); int TamLinha = 164; int PosLeitura = 0; while (PosLeitura < Texto.Length) { ListTexto.Add(Texto.Substring(PosLeitura,TamLinha)); PosLeitura += TamLinha; } return ListTexto; }
Depois que quebrou cada linha separe seu registro de acordo com o tamanho de cada linha, podendo variar a função de acordo com o tipo de registro, segue um exemplo, estamos utilizando classes dinamicas, se tiver duvida de como funcionam visite esta postagem aqui :
http://www.codigoexpresso.com.br/Home/Postagem/62
public List<object> quebraRegistro(List<string> Texto) { List<object> Registros = new List<object>(); foreach(string item in Texto) { dynamic MeuRegistro = new ExpandoObject(); MeuRegistro.Tipo = item.Substring(0, 1); MeuRegistro.Texto = item.Substring(1, 157); MeuRegistro.Registro = item.Substring(158, 6); Registros.Add(MeuRegistro); } return Registros; }
coloque as chamadas das funções em um botão para ver como funciona
private void button2_Click(object sender, EventArgs e) { string Texto = "01780B102765517835125003368214150616A22240157814U0F9BD57814UGB102765 000000006193222874770D01188738000197 D1039D21-37EB-48C3-8F50-0B26F070F2CA000001"+ "10000004337141000000368113000000002944900000004337142000000052045700000000000000000000000000310A2011*2874770*00000000000 000002"+ "2FIAT/STRADA WORKING 02 PASSAGEIROS 000003"+ "2004 CILINDROS - 0 KM FAB 2016 MOD-2016 000004"+ "2 COR-PRATA BARI 000005"+ "2REV-TECIDO MAMBO 000006"+ "37ME-KIT CELEBRATION 2 210-PINTURA METALICA 000007"+ "019703308764517828021003368956150616A15303119716T0F9BD19716TG3308764TTAXI 000000002491262993730D10621458600 000008"+ "10000003493118000000324534600000000000000000000000000000000000000000000000000000000000000000310A5011*2993730*00000000000 000009"+ "2FIAT/SIENA ESSENCE 1.6.4 05 PASSAGEIROS 000010"+ "2004 CILINDROS - 0 KM FAB 2016 MOD-2016 000011"+ "2 COR-BRANCO BANCHISA 000012"+ "2REV-MALHA SPACER ARCO+MALHA ALAG U 000013"; List<string> ListTexto = quebraLinha(Texto); List<object> ListRegistros = quebraRegistro(ListTexto); foreach (dynamic item in ListRegistros) { MessageBox.Show("Tipo: " + item.Tipo + Environment.NewLine + "Linha: " + item.Texto + Environment.NewLine + "Registro: " + item.Registro); } }
Só lembrando que quebrei seu registro em 3 , tipo, texto e o número do registro, trabalhe a função quebre o texto em quantas partes precisar
Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
Visite : www.codigoexpresso.com.br
- Editado Código Expresso segunda-feira, 11 de julho de 2016 22:38
- Sugerido como Resposta Robson William SilvaModerator terça-feira, 12 de julho de 2016 14:29
- Marcado como Resposta Robson William SilvaModerator quarta-feira, 13 de julho de 2016 18:21
Todas as Respostas
-
-
-
Fala Yannick, tudo bem?
int contador; string inicio = string.Empty; while((linha = strReader.ReadLine()) != null) { inicio = linha.Substring(0, 1); if(inicio = 2) { contador++; } if(inicio = 3) { contator++; } if(inicio = 0) { Console.WriteLine(contador); contador = 0; } }
Acho que o ideal seria criar uma lista de string e tal, mas acho que assim já funciona. :)
Leopoldo Augusto N. S. (Se esta resposta te ajudou de alguma forma, marque-a como útil, ok?)
-
-
Voce pode Quebrar cada linha de sua string com uma função jogando para List<string>, uma que que seu tamanho é fixo com 164 caracteres assim
public List<string> quebraLinha(string Texto) { List<string> ListTexto = new List<string>(); int TamLinha = 164; int PosLeitura = 0; while (PosLeitura < Texto.Length) { ListTexto.Add(Texto.Substring(PosLeitura,TamLinha)); PosLeitura += TamLinha; } return ListTexto; }
Depois que quebrou cada linha separe seu registro de acordo com o tamanho de cada linha, podendo variar a função de acordo com o tipo de registro, segue um exemplo, estamos utilizando classes dinamicas, se tiver duvida de como funcionam visite esta postagem aqui :
http://www.codigoexpresso.com.br/Home/Postagem/62
public List<object> quebraRegistro(List<string> Texto) { List<object> Registros = new List<object>(); foreach(string item in Texto) { dynamic MeuRegistro = new ExpandoObject(); MeuRegistro.Tipo = item.Substring(0, 1); MeuRegistro.Texto = item.Substring(1, 157); MeuRegistro.Registro = item.Substring(158, 6); Registros.Add(MeuRegistro); } return Registros; }
coloque as chamadas das funções em um botão para ver como funciona
private void button2_Click(object sender, EventArgs e) { string Texto = "01780B102765517835125003368214150616A22240157814U0F9BD57814UGB102765 000000006193222874770D01188738000197 D1039D21-37EB-48C3-8F50-0B26F070F2CA000001"+ "10000004337141000000368113000000002944900000004337142000000052045700000000000000000000000000310A2011*2874770*00000000000 000002"+ "2FIAT/STRADA WORKING 02 PASSAGEIROS 000003"+ "2004 CILINDROS - 0 KM FAB 2016 MOD-2016 000004"+ "2 COR-PRATA BARI 000005"+ "2REV-TECIDO MAMBO 000006"+ "37ME-KIT CELEBRATION 2 210-PINTURA METALICA 000007"+ "019703308764517828021003368956150616A15303119716T0F9BD19716TG3308764TTAXI 000000002491262993730D10621458600 000008"+ "10000003493118000000324534600000000000000000000000000000000000000000000000000000000000000000310A5011*2993730*00000000000 000009"+ "2FIAT/SIENA ESSENCE 1.6.4 05 PASSAGEIROS 000010"+ "2004 CILINDROS - 0 KM FAB 2016 MOD-2016 000011"+ "2 COR-BRANCO BANCHISA 000012"+ "2REV-MALHA SPACER ARCO+MALHA ALAG U 000013"; List<string> ListTexto = quebraLinha(Texto); List<object> ListRegistros = quebraRegistro(ListTexto); foreach (dynamic item in ListRegistros) { MessageBox.Show("Tipo: " + item.Tipo + Environment.NewLine + "Linha: " + item.Texto + Environment.NewLine + "Registro: " + item.Registro); } }
Só lembrando que quebrei seu registro em 3 , tipo, texto e o número do registro, trabalhe a função quebre o texto em quantas partes precisar
Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
Visite : www.codigoexpresso.com.br
- Editado Código Expresso segunda-feira, 11 de julho de 2016 22:38
- Sugerido como Resposta Robson William SilvaModerator terça-feira, 12 de julho de 2016 14:29
- Marcado como Resposta Robson William SilvaModerator quarta-feira, 13 de julho de 2016 18:21