FUN?ÃO TAB() NO C#
Boa tarde, pessoal.
Estou escrevendo dados em um arquivo texto.
No VB.Net meu código funcionava assim:
Em C#, como faço para imprimir os dados nas colunas que eu quero, pois não existe a função TAB() ?
Estou escrevendo dados em um arquivo texto.
No VB.Net meu código funcionava assim:
FileOpen(1, [Ô]c: emp\vendas.txt[Ô], OpenMode.Output)
Print(1, [Ô]7;r; Relatório das Vendas com Cartões[Ô])
Print(1, TAB(0), nomeempresa, TAB(122), [Ô]Pagina: ###[Ô])
Print(1, TAB(0), [Ô]------------------------------------------------------------------------------------------------------------------------------------[Ô])
Print(1, TAB(0), [Ô]Data[Ô], TAB(15), [Ô]Bandeira[Ô], TAB(35), [Ô]Tipo Oper.[Ô], TAB(55), [Ô]Parcela[Ô], TAB(69), [Ô]Vlr. Parc.[Ô], TAB(87), [Ô]Desp.Fin.[Ô], TAB(104), [Ô]Vlr. Liq.[Ô], TAB(123), [Ô]Prev.Cred.[Ô])
Print(1, TAB(0), [Ô]------------------------------------------------------------------------------------------------------------------------------------[Ô])
Em C#, como faço para imprimir os dados nas colunas que eu quero, pois não existe a função TAB() ?
Use assim:
using (System.IO.StreamWriter file = new System.IO.StreamWriter([Ô]c:\\pasta\\arquivo.txt[Ô]))
{
file.WriteLine(string.Format([Ô] {0} {1}Página: ###[Ô], nomeempresa, new String([ô] [ô], 122));
//
}
Se não fosse pedir muito, poderia me explicar essa formatação?
file.WriteLine(string.Format([Ô] {0} {1}Página: ###[Ô], nomeempresa, new String([ô] [ô], 122));
file.WriteLine é o método que vai gravar o texto no arquivo.
string.Format, é um método que pode ser parametrizado. Você especifica placeholders na string, seguido dos valores a serem colocados nesses placeholders. No caso {0} e {1} são os placeholders, que serão substituÃdos respectivamente por nomeempresa e uma string contendo 122 caracteres em branco.
O [Ô] [Ô] é uma tabulação normal.
O resultado é uma string mais ou menos assim:
[Ô] Empresa XYZ Página: ###[Ô]
string.Format, é um método que pode ser parametrizado. Você especifica placeholders na string, seguido dos valores a serem colocados nesses placeholders. No caso {0} e {1} são os placeholders, que serão substituÃdos respectivamente por nomeempresa e uma string contendo 122 caracteres em branco.
O [Ô] [Ô] é uma tabulação normal.
O resultado é uma string mais ou menos assim:
[Ô] Empresa XYZ Página: ###[Ô]
O método string.Format, possui muitas outras funcionalidades além dessa, você pode inclusive usar placeholders dimensionados e formatados, incluindo com múltiplas culturas. Na documentação mostra isso com detalhes e vários exemplos. Alinhamento também é função do método string.Format:
const string formato = [Ô]{0,-10} {1,10}[Ô];
string linha1 = string.Format(formato,
100,
5);
string linha2 = string.Format(formato,
[Ô]Cenoura[Ô],
[Ô]Girafa[Ô]);
Console.WriteLine(linha1);
Console.WriteLine(linha2);
// o resultado seria:
//100 5
//Cenoura Girafa
Valeu, amigo. Muito obrigado pelo esclarecimento.
Vou estar testando aqui e depois te retorno.
Desculpe a demora em responder, mas aconteceram problemas que me impediram de ver sua resposta.
Até mais.
Vou estar testando aqui e depois te retorno.
Desculpe a demora em responder, mas aconteceram problemas que me impediram de ver sua resposta.
Até mais.
Caro Kerplunk, creio que no C# não exista nada parecido com o comando Tab() do VB.Net, pois já procurei tanto na internet e não encontrei nada que pudesse me servir.
Quando o código no VB.Net estava:
file.WriteLine(Tab(0), nomeempresa, Tab(122), Página: ###)
A página era escrita exatamente na coluna 122 do arquivo.
Mas no C#:
file.WriteLine(string.Format([Ô] {0} {1}Página: ###[Ô], nomeempresa, new String([ô] [ô], 122));
A página fica escrita lá na coluna duzentos e pouco.
Essa formatação tem a ver com a quantidade de espaços da primeira coluna para a segunda? Sendo assim eu teria que contar quantos caracteres tem a primeira coluna e somar os espaços para depois ver qual o número da próxima coluna? Se for isso, não é exatamente o que eu precisava, mas vou me virando com esse código até encontrar uma solução melhor.
Mesmo assim, obrigado. Deixo o tópico aberto por enquanto para se você ou alguém mais quiser responder.....
Quando o código no VB.Net estava:
file.WriteLine(Tab(0), nomeempresa, Tab(122), Página: ###)
A página era escrita exatamente na coluna 122 do arquivo.
Mas no C#:
file.WriteLine(string.Format([Ô] {0} {1}Página: ###[Ô], nomeempresa, new String([ô] [ô], 122));
A página fica escrita lá na coluna duzentos e pouco.
Essa formatação tem a ver com a quantidade de espaços da primeira coluna para a segunda? Sendo assim eu teria que contar quantos caracteres tem a primeira coluna e somar os espaços para depois ver qual o número da próxima coluna? Se for isso, não é exatamente o que eu precisava, mas vou me virando com esse código até encontrar uma solução melhor.
Mesmo assim, obrigado. Deixo o tópico aberto por enquanto para se você ou alguém mais quiser responder.....
Fala aà cara.
Na verdade, esse é um problema bem simples de resolver. Vou fazer algo que não costumo fazer aqui no fórum, que é dar código fonte.
Crie um arquivo classe e coloque isso dentro dele:
Agora pra usar, basta você fazer isso (Lembre-se de importar o namespace Percifilho):
MeuPrinter printer = new MeuPrinter();
printer.NovaLinha([Ô]nomeEmpresa[Ô], new MeuTab(122), [Ô]Pagina:###[Ô]);
printer.Escrever([Ô]c:\\DanielTest\ este.txt[Ô]);
Espero ter ajudado.
Abraços!
Na verdade, esse é um problema bem simples de resolver. Vou fazer algo que não costumo fazer aqui no fórum, que é dar código fonte.
Crie um arquivo classe e coloque isso dentro dele:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Percifilho
{
class MeuPrinter
{
private List<object> listaParametros = new List<object>();
public void NovaLinha(params object[] parametros)
{
listaParametros.Add(parametros);
}
public void Escrever(string caminho)
{
using (StreamWriter file = new StreamWriter(caminho))
{
foreach (object[] objetos in listaParametros)
{
file.WriteLine(RetornaString(objetos));
}
}
}
private string RetornaString(object[] arrayObjeto)
{
StringBuilder construtor = new StringBuilder();
foreach (object objeto in arrayObjeto)
{
if (objeto.GetType() == typeof(string))
{
construtor.Append(Convert.ToString(objeto));
}
else
{
int tamanho = ((MeuTab)objeto).Tamanho;
construtor.Append(new string([ô] [ô], tamanho - construtor.Length - 1));
}
}
return construtor.ToString();
}
}
class MeuTab
{
public int Tamanho { get; set; }
public MeuTab(int tamanho)
{
this.Tamanho = tamanho;
}
}
}
Agora pra usar, basta você fazer isso (Lembre-se de importar o namespace Percifilho):
MeuPrinter printer = new MeuPrinter();
printer.NovaLinha([Ô]nomeEmpresa[Ô], new MeuTab(122), [Ô]Pagina:###[Ô]);
printer.Escrever([Ô]c:\\DanielTest\ este.txt[Ô]);
Espero ter ajudado.
Abraços!
Caro amigo, DS2T. Esse é sim, um problema bem simples de resolver, PRA VOCÊ, rsrsrs.
Matou a pau!!!!! Era exatamente isso que eu queria. E olha que eu procurei tanto na internet que até desisti, estava usando uma outra classe, mas que também não deu muito certo, não. Agora vou alterar o projeto e utilizar essa classe.
Cara, muito obrigado mesmo. Quebrou uma galho enorme.
Por isso que adoro fazer parte dessa famÃlia VBMania, tem muita gente boa, disposta a nos ajudar.
Até mais e tenha uma bom dia.
Matou a pau!!!!! Era exatamente isso que eu queria. E olha que eu procurei tanto na internet que até desisti, estava usando uma outra classe, mas que também não deu muito certo, não. Agora vou alterar o projeto e utilizar essa classe.
Cara, muito obrigado mesmo. Quebrou uma galho enorme.
Por isso que adoro fazer parte dessa famÃlia VBMania, tem muita gente boa, disposta a nos ajudar.
Até mais e tenha uma bom dia.
Tópico encerrado , respostas não são mais permitidas