Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jean Freitas

gerar arquivo txt de acordo com layout pré-definido em c#

Recommended Posts

Agora a coisa é mais fácil :D

 

Você pode usar o próprio número da coluna se ela for um array, caso ela não seja um array faça o seguinte, que é muito mais fácil:

 

Crie uma variável chamado contador FORA DO FOREACH e iguale ela a 0 (tipo int)

Depois, dentro do foreach, logo nesta linha:

 

 

  foreach (string coluna in linhas)
            {

             

              contador++; //Adiciona 1 ao contador
              String id =  contador.toString("D5"); //Iguala o contador a uma string e adiciona os zeros


                if (i > 2)
                {

O resto do foreach é o mesmo. Agora você vai adicionar essa variável ID na sua coluna:

 

novacoluna += id.PadRight(5); //ordem

Se você já está adicionando os zeros então o PadRight não é necessário, porém ainda não testei este código, então pode ser que não funcione totalmente, mas ai nós vamos corrigindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora a coisa é mais fácil :D

 

Você pode usar o próprio número da coluna se ela for um array, caso ela não seja um array faça o seguinte, que é muito mais fácil:

 

Crie uma variável chamado contador FORA DO FOREACH e iguale ela a 0 (tipo int)

Depois, dentro do foreach, logo nesta linha:

 

 

  foreach (string coluna in linhas)
            {

             

              contador++; //Adiciona 1 ao contador
              String id =  contador.toString("D5"); //Iguala o contador a uma string e adiciona os zeros


                if (i > 2)
                {

O resto do foreach é o mesmo. Agora você vai adicionar essa variável ID na sua coluna:

 

novacoluna += id.PadRight(5); //ordem

Se você já está adicionando os zeros então o PadRight não é necessário, porém ainda não testei este código, então pode ser que não funcione totalmente, mas ai nós vamos corrigindo.

Perfeito é exatamente isso que preciso, só não entendi porque o contador inicia no 4 quando gera o arquivo, sendo que era para começar a partir do 1, mas tá funcionando sim, você é o cara.... estou quase no fim já rsrsrsrsrsrsrs, depois de resolver isso só preciso converter a virgula da string valor para ponto, pois, testei o arquivo gerado na integração e deu erro por não ler a vírgula e como a filtragem é feita com vírgula complicou, mas muito obrigado até aqui e se puder continuar me ajudando agradeço mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Pegue a string do valor e faça isso:

 

 

string_do_valor = string_do_valor.Replace(",",".");

Perfeito e quanto ao contador iniciar em 00004, tem ideia do que possa ser?

 

obrigado de novo

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara pode ser porque você não zerou ele, tente colocar [inline]int contador = 0[/inline] antes do foreach, mas tem que ser antes de todos os loops, se não ele vai cair dentro do laço e pode não ser 0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara pode ser porque você não zerou ele, tente colocar [inline]int contador = 0[/inline] antes do foreach, mas tem que ser antes de todos os loops, se não ele vai cair dentro do laço e pode não ser 0.

fiz como você tinha sugerido e ficou assim:

 

int i = 0;

int contador = 0;

foreach (string coluna in linhas)

{

 

contador++;

string id = contador.ToString("D5");

 

e mesmo assim inicia em 00004, to pesquisando e tentando, só falto corrigir isso agora e já era... graças a sua ajuda aprendi batante coisa, parabéns pelo seu trabalho, espero um dia poder ajudar alguém também e assim retribuir a sua ajuda...grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inverta as linhas aqui:

 

contador++;
string id = contador.ToString("D5");

Ponha o contador depois:

 

string id = contador.ToString("D5");
contador++;

 

Use o padright que utilizei lá em cima, veja se altera. Porém acho que isso é devido algum loop externo que está gerando isso, ele está passando mais vezes do que deveria, ou seja, ele só processa a partir do 4º

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inverta as linhas aqui:

 

contador++;
string id = contador.ToString("D5");

Ponha o contador depois:

 

string id = contador.ToString("D5");
contador++;

 

Use o padright que utilizei lá em cima, veja se altera. Porém acho que isso é devido algum loop externo que está gerando isso, ele está passando mais vezes do que deveria, ou seja, ele só processa a partir do 4º

fiz o que falou e agora está começando a partir do 3, estranho no metodo só existe um loop, a não ser que esteja lendo o loop no momento da leitura do arquivo que uso para filtrar os dados, mas não influencia nesse campo de contagem... vou continuar tentando, se tiver mais alguma ideia e puder passar.... obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ultima ideia que eu tenho é jogar esse contador=0 fora de tudo, lá no espaço para variáveis globais. Só que ai você precisaria zerar ele no final do loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ultima ideia que eu tenho é jogar esse contador=0 fora de tudo, lá no espaço para variáveis globais. Só que ai você precisaria zerar ele no final do loop.

tentei e tambem não funcionou, tambem não tenho a menor ideia do que possa estar influenciando nele, de qualquer forma obrigado, vou continuar tentando até conseguir, só falta isso agora... Deus o abençoe

 

KhaosDoctor, consegui fazendo o seguinte:

 

fui no arquivo de onde filtro os dados e retirei as linhas de cabeçalho, o problema está no int i = 0 aí faço o if (i > 2) para ler no arquivo a partir da segunda linha os dados que preciso, não sei porque mas por esse motivo ele começa no 3, retirei esse if (i > 2) e deu certo, vou deixar assim até encontrar outra forma... vou testar agora para ver se vai funcionar mesmo.... obrigado pela sua ajuda!!! se não fosse você não teria conseguido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele funciona assim porque o seu i é maior que 2, ao invés de retirar isso, coloque o contador antes de tudo, logo abaixo de onde você define o i, assim ele não irá passar por essa verificação. Porém a linha onde você vai ter que chamar o numero vai ter que estar antes dessas verificações também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele funciona assim porque o seu i é maior que 2, ao invés de retirar isso, coloque o contador antes de tudo, logo abaixo de onde você define o i, assim ele não irá passar por essa verificação. Porém a linha onde você vai ter que chamar o numero vai ter que estar antes dessas verificações também.

eu já fiz isso, mas não tenho como deixar a linha que chama o número fora do foreach... vou usando assim mesmo, já está funcionando, agora só tenho que fazer uns ajustes do tipo fazer com o que o nome do arquivo seja sempre salvo como ctblctosXXXX.txt, onde XXXX é o código da empresa, criei um txt box para o usuario digitar o cod da empresa e fixei ctblactos, mas o arquivo fica ctblctos0853 sem o .txt e aí não dá certo, vou tentar até conseguir. obrigado fera

Compartilhar este post


Link para o post
Compartilhar em outros sites

KhaosDoctor, preciso de mais uma ajuda, se possível, é claro... lembra que precisei usar replace na string valor:

string_do_valor = string_do_valor.Replace(",",".");

esqueci que tenho alguns valores com ponto separando os milhares ex. 1.853,22, o programa gera correto, mas na hora de importar ele lê 1,85 desconsiderando o resto, sabe como posso formatar para que formate apenas a virgula dos centesimos? obrigado fera

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.