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