GERAR ARQUIVO TXT DE ACORDO COM LAYOUT PRÉ-DEFINID
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
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
Ve se ajuda:
Dim string_fixa As string * 20
http://www.macoratti.net/strings.htm
Dim string_fixa As string * 20
http://www.macoratti.net/strings.htm
RONEMBRITO,
Preciso em C#
Att.
Pierre
Preciso em C#
Att.
Pierre
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?
Mas explique melhor qual é exatamente a sua dúvida: é na hora de imprimir, ou de gravar o arquivo texto?
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
[ô]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
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.
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.
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?
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?
PERCIFILHO,
Cara muito obrigado, relaxa assim que conseguir me avisa.... vou tentando aqui também
Att.
Cara muito obrigado, relaxa assim que conseguir me avisa.... vou tentando aqui também
Att.
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()
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()
Nilson,
Consigo colocar esta função toda no C#?
Att.
Consigo colocar esta função toda no C#?
Att.
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
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
Tópico encerrado , respostas não são mais permitidas