FUN?ÃO TAB() NO C#

PERCIFILHO 12/11/2015 15:42:25
#453792
Boa tarde, pessoal.
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() ?
KERPLUNK 12/11/2015 15:55:11
#453797
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));
//
}
PERCIFILHO 12/11/2015 16:03:13
#453799
Se não fosse pedir muito, poderia me explicar essa formatação?
file.WriteLine(string.Format([Ô]     {0} {1}Página: ###[Ô], nomeempresa, new String([ô] [ô], 122));


KERPLUNK 12/11/2015 16:49:03
#453804
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: ###[Ô]

KERPLUNK 12/11/2015 17:14:25
#453809
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

PERCIFILHO 16/11/2015 08:54:34
#453953
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.
PERCIFILHO 16/11/2015 12:12:57
#453971
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.....
DS2T 16/11/2015 14:23:56
#453981
Resposta escolhida
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:

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!
PERCIFILHO 17/11/2015 08:36:58
#454017
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.
Tópico encerrado , respostas não são mais permitidas