GERAR ARQUIVO TXT DE ACORDO COM LAYOUT PRÉ-DEFINID

EIADVANCED 11/04/2016 09:59:01
#460858
Bom dia,

Preciso exportar dados de uma tabela de acordo com um layout especifico que consiste em tamanho e posição.

Para fácil manutenção, preciso que seja simples alterar o layout.

Segue abaixo Layout que deve ser exportado:

Campo |Tamanho |Posição Inicial |Posição Final
--------------------------------------------------------------
Agencia |5 |1 |5
Conta |13 |6 |19
DataInclusao |10 |20 |30
Tipo |1 |31 |32
IdUsuario |7 |33 |40
CNPJ |14 |41 |55


Obrigado
RONEBRITO 15/04/2016 01:17:36
#460942
Ve se ajuda:

Dim string_fixa As string * 20

http://www.macoratti.net/strings.htm
EIADVANCED 18/04/2016 11:34:07
#461071
RONEMBRITO,

Preciso em C#

Att.
Pierre
PERCIFILHO 18/04/2016 11:55:05
#461072
Você vai precisar utilizar uma fonte de tamanho fixo, por exemplo Courier New.
Mas explique melhor qual é exatamente a sua dúvida: é na hora de imprimir, ou de gravar o arquivo texto?
EIADVANCED 18/04/2016 12:04:00
#461073
Tem isso feito em VB que funciona perfeitamente mas preciso migrar para C#, alguém pode me auxiliar?


[ô]Gerar Arquivo Texto
Function GerarTXT_Binda_ContabilidadeSimples(Nome_Arquivo As String)
On Error GoTo TrataErro

[ô]Cria/Abre Arquivo conf Diretorio
Open Nome_Arquivo For Output As #1

RegistroTXT_Binda_ContabilidadeSimples ([Ô]ContabilidadeOK[Ô])

Close #1

MsgBox [Ô]Arquivo convertido com sucesso !!![Ô] & Chr(10) & [Ô]Verifique no diretório: [Ô] & Chr(10) & Chr(10) & Nome_Arquivo, vbExclamation, [Ô]EI Conversor[Ô]

TrataErro_Exit:
Exit Function
TrataErro:
MsgBox Err.Description
Close #1
Resume TrataErro_Exit
End Function





[ô]Insere um linha no arquivo texto
[ô]PosIni = Posicao Inicio
[ô]PosFim = Posicao Final
[ô]Comp = Comprimento
[ô]Conteudo = Texto a ser Inserido
[ô]Tipo = [Ô]N[Ô]-Numerico , [Ô]A[Ô]-Alfanumerico
Function REGISTRO(Pos_Ini As Integer, Pos_Fim As Integer, Conteudo As String, Tipo As String) As Boolean

[ô]Verifica Comprimento
Comp = (Pos_Fim - Pos_Ini) + 1

If Tipo = [Ô]N[Ô] Then
Conteudo = CompletaString(Conteudo, [Ô] [Ô], Comp, [Ô]E[Ô]) [ô]Completa com 0 se Numerico
Else
Conteudo = CompletaString(Conteudo, [Ô] [Ô], Comp, [Ô]D[Ô]) [ô]Completa com espaços se AlfaNumerico
End If

Retorno = False

If (Pos_Ini + Comp - 1) > TamArq Then
MsgBox [Ô]Inserção inválida... [Ô] & (Pos_Ini + Comp - 1), , vbQuestion + vbOKOnly, [Ô]EI Conversor[Ô]
ElseIf Len(Conteudo) <> Comp Then
MsgBox [Ô]Tamanhos diferentes:[Ô] & vbCrLf & [Ô]Tamanho do Texto: [Ô] & Len(Conteudo) & [Ô] Comprimento: [Ô] & Comp, vbQuestion + vbOKOnly, [Ô]EI Conversor[Ô]
Else
Linha = Left(Linha, Pos_Ini - 1) & Conteudo & Right(Linha, TamArq - (Pos_Ini + Comp - 1))
If Len(Linha) <> TamArq Then
MsgBox [Ô]Tamanhos diferentes:[Ô] & vbCrLf & [Ô]Linha: [Ô] & Len(Linha) & [Ô] Reg: [Ô] & TamArq & vbCrLf & Linha
Else
Retorno = True
End If
End If

REGISTRO = Retorno

End Function






Function RegistroTXT_Binda_ContabilidadeSimples(NomeTabela As String)
Dim CONT As Integer
Dim Valor As Currency
Dim Conta, Tipo As String
CONT = 0


If TABELA.RecordCount = 0 Then
MsgBox [Ô]Não há Lançamentos para serem gerados...[Ô], vbCritical, [Ô]EI Conversor[Ô]
Exit Function
Close #1
End If

ContTipo50 = 0

TABELA.MoveFirst

Do Until TABELA.EOF

Linha = String(TamArq, [Ô]@[Ô])
X = REGISTRO(1, 7, Format(CONT, [Ô]0000000[Ô]), [Ô]N[Ô]) [ô]Lançamento
X = REGISTRO(8, 12, Mid(TABELA![Data], 1, 5), [Ô]N[Ô]) [ô]Data
X = REGISTRO(13, 19, Mid(Conta, 1, 7), [Ô]N[Ô]) [ô]Débito C.C
X = REGISTRO(20, 26, Mid(NullToZero(TABELA![Rdz2]), 1, 7), [Ô]N[Ô]) [ô]Crédito C.C
X = REGISTRO(27, 43, Mid(Format(SemAcentos(Format(NullToZero(TABELA![Valor]), [Ô]###0.00[Ô])), [Ô]00000000000000000[Ô]), 2, 14) & [Ô].[Ô] & Mid(Format(SemAcentos(Format(NullToZero(TABELA![Valor]), [Ô]###0.00[Ô])), [Ô]00000000000000000[Ô]), 16, 2), [Ô]N[Ô]) [ô]Valor
X = REGISTRO(44, 48, [Ô]99999[Ô], [Ô]N[Ô]) [ô]Código do Histórico Padrão (Previamente Cadastrado)
X = REGISTRO(49, 248, Mid(NullToVazio(TABELA![Historico]), 1, 200), [Ô]A[Ô]) [ô]Complemento do Histórico
X = REGISTRO(249, 290, [Ô][Ô], [Ô]N[Ô]) [ô]Débito C.C.
X = REGISTRO(291, 331, [Ô][Ô], [Ô]N[Ô]) [ô]Crédito C.C.
Print #1, Linha
ContTipo50 = ContTipo50 + 1
Loop
End Function



EIADVANCED 18/04/2016 12:12:09
#461074
PERCIFILHO,

Segue acima o que eu preciso fazer, este código faço no vb mas não faço ideia de como fazer no C#

Att.
PERCIFILHO 18/04/2016 12:43:37
#461076
Para [Ô]traduzir[Ô] códigos do VB.Net para o C#, você pode tentar esse tradutor, já usei muito e gostei, apesar que dependendo das suas linhas de comando, algumas coisas ele não consegue traduzir, mas a maior parte, é traduzido. Existem outros, se quiser pesquisar no Google vai achar.
http://www.carlosag.net/tools/codetranslator/

Agora, pelo que entendi você vai precisar também saber como abrir, escrever e salvar arquivo texto, também, né?
Aí eu te indico esse que você já deve conhecer, se não conhece, vale a pena, tem muita coisa boa.
http://www.macoratti.net

Estou meio sem tempo, mas vou tentando aqui te ajudar, tá? Joguei o teu código no tradutor que lhe falei, mas tem algumas coisas que não foram traduzidas corretamente, portanto o código não vai funcionar, teria que analisar o código com calma e tentar reescrevê-lo. Vou ver se consigo, mas não dá pra ser agora. Se algum outro colega aqui do Fórum estiver com mais tempo e puder ajudar o nosso amigo aqui, fique à vontade.
Falou?
EIADVANCED 18/04/2016 14:19:02
#461082
PERCIFILHO,

Cara muito obrigado, relaxa assim que conseguir me avisa.... vou tentando aqui também

Att.
NILSONTRES 18/04/2016 14:48:38
#461085
Na plataforma .net vc não utiliza Output As #1.
importe a classe System.Text
Imports System.Text

Dim sw As New IO.StreamWriter([Ô]c:\meutexto.txt[Ô])
sw.WriteLine([Ô]A[Ô])
sw.WriteLine([Ô]B[Ô])
sw.Flush()
sw.Close()
EIADVANCED 18/04/2016 15:29:18
#461088
Nilson,

Consigo colocar esta função toda no C#?

Att.
ELUCIMAR 18/04/2016 16:10:52
#461092
EIADVANCED

Vou te passar um exemplo baseado no Layout que você postou, lendo e populando um List<T>:

public class DadosBancarios
{
public string Agencia { get; set; }
public string Conta { get; set; }
public DateTime DataInclusao { get; set; }
public string Tipo { get; set; }
public string IdUsuario { get; set; }
public string CNPJ { get; set; }
}

List<string> lstLines = System.IO.File.ReadAllLines(@[Ô]c:\Arquivo.txt[Ô]).ToList();
List<DadosBancarios> lstDadaosBancarios = new List<DadosBancarios>();

// Faz o Loop
lstLines.ForEach(linha =>
{
lstDadaosBancarios.Add(new DadosBancarios()
{
Agencia = linha.Substring(0,5),
Conta = linha.Substring(5,13),
DataInclusao = Convert.ToDateTime(linha.Substring(17,10)),
Tipo = linha.Substring(27,1),
IdUsuario = linha.Substring(28,7),
CNPJ = linha.Substring(35, 14)
});
});


A importação foi baseada neste txt :
0000100000001347818/04/20151000000712345678901234
0001000000001850418/04/20152000001012345678901230
0002000000001340018/04/20153000007012345678901299
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas