Jump to content
Sign in to follow this  
SLIFE

Delimitado por Espaços

Recommended Posts

SLIFE

Boas

Mais uma vez preciso da vossa ajuda.

Precisava de fazer algo que importa-se de um ficheiro Txt para dentro de uma datagried.

O problema é que o ficheiro txt tem que ser feito a delimitação por espaços.

Por exemplo:

Ficheiro txt ----

  1 10001 BIFE LOMBO NOVILHO                19.99    0 NOVILHO

Precisava de importar isto para uma datagried, mas que ficasse algo do genero:

Num  Codigo  Descricao                          PVP        TIPO    FAMILIA

1        10001    BIFE LOMBO NOVILHO      19.99      0      NOVILHO

Isto é teriam de ser eliminados os espaçamentos existentes na linha e adicionar cada valor a coluna correspondente da datagried.

Já pensei em fazer com espaços fixos, e começar a ler de até.

Mas o problema é que o ficheiro nem sempre tem os dados no mesmo inicio ou no mesmo fim.

Por exemplo nesta linha tem a descrição como Sendo BIFE LOMBO NOVILHO, mas no artigo a seguir já é apenas BIFE ACEM.

Como poderei fazer isso, alguem me consegue dar uma ajuda?

Agradecia.

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Se a descrição também tem espaços e o seu comprimento não é fixo, não vai ser fácil...

O campo PVP começa sempre no mesmo sitio? Se começar tens o problema resolvido


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Se a descrição também tem espaços e o seu comprimento não é fixo, não vai ser fácil...

O campo PVP começa sempre no mesmo sitio? Se começar tens o problema resolvido

Boas

Penso que sim, que esteja sempre no mesmo sitio.

Dizes que se assim for tenho o problema resolvido! Mas como?

Tenho estado a tentar fazer o split, mas estou com um problema.

Crio o array da linha que fica com uma leght de 36, sendo que a maior parte em branco.

Consegueria resolver se conseguisse colocar uma verificação á array a verificar cada linha, e se visse que nao tinha nada escrito eliminava-a, se estivesse escrito algo, entao adicionava ao datagried.

Será que dá para fazer?

Como posso fazer um

for each linha as string in arraylinhas ............

  'cria um novo objeto StreamReader
            Dim objReader As New StreamReader(nomeArquivo, System.Text.Encoding.Default)
            'percorre o arquivo
            Do While objReader.Peek() <> -1
                linhaTexto = objReader.ReadLine()
                arrrayDeLinhas = Split(linhaTexto, " ")
                Do Until arrrayDeLinhas = -1
                    If arrrayDeLinhas(0) = "" Then ' Estava a tentar colocar um verificador aqui.....

                    Else
                        row = dt.NewRow
                        row.ItemArray = arrrayDeLinhas
                        dt.Rows.Add(row)
                    End If
                Loop
            Loop
                'atribui ao datagridview o objeto datatable criado
                DataGridView1.DataSource = dt
                objReader.Close()

O que tenho actualmente é isto, mas com erro...

Dá para fazer alguma coisa deste genero?


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Suponho que todos os campos nesse txt começam numa posição fixa e acabam noutra posição fixa.

Apenas tens de saber o index de inicio e o index de fim de cada campo e depois fazer o TrimStart e depois o TrimEnd


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Suponho que todos os campos nesse txt começam numa posição fixa e acabam noutra posição fixa.

Apenas tens de saber o index de inicio e o index de fim de cada campo e depois fazer o TrimStart e depois o TrimEnd

Pois o problema é que nao começam nem acabam sempre no mesmo sitio.

Eu já tinha pensado em fazer isso e até cheguei a fazer algo do genero de:

aa = (Mid(linhaTexto, Val(My.Forms.FrmOpcoes.TxtEANIncio1.Text), Val(My.Forms.FrmOpcoes.TxtEANFinal1.Text)))

Mas depois verifiquei que como o txt não tem sempre o mesmo inicio e fim, não dava.

Dai parti para tentar fazer o split.

Mas até agora sem sucesso...

Alguma dica?


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Contando também os espaços não?

Esses ficheiros são muito utilizados entre empresas... Os comprimentos normalmente são fixos. Caso não seja vai ser dificil


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Contando também os espaços não?

Esses ficheiros são muito utilizados entre empresas... Os comprimentos normalmente são fixos. Caso não seja vai ser dificil

Mas não da para fazer um split na linha inteira de depois colocar um verificador a ver se o array estiver em branco não passa para a datagried se tiver texto entao passa.

Nao da para fazer isso??


Sandro Coelho

Share this post


Link to post
Share on other sites
jviana

Olá, porque é que em vêz de tanto trabalho, pelo que estou a ver, não simplificas o "código"?

Em vez de :

Num  Codigo  Descricao                          PVP        TIPO    FAMILIA

1        10001    BIFE LOMBO NOVILHO      19.99      0      NOVILHO

Não pões:

Num.        Codigo  Descricao                                          PVP              TIPO        FAMILIA

0001        10001    BIFE-LOMBO-NOVILHO------------        0019.99      0000          NOVILHO-------------

Num. -> 4 Caracteres

Código-> 5 Caracteres

Descrição-> 30 Caracteres

PVP-> 7 Caracteres

Tipo-> 4 Caracteres

Familia-> 20 Caracteres

Vê-se assim não é mais facil.

Cumps. J.Viana


Learning

  • VB.Net
  • HTML
  • C/C++

Share this post


Link to post
Share on other sites
Caça

Mas não da para fazer um split na linha inteira de depois colocar um verificador a ver se o array estiver em branco não passa para a datagried se tiver texto entao passa.

Nao da para fazer isso??

Dar dá...

Mas não é preciso dar uma volta se existe um caminho em frente


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

OK, então façam o que quiserem  ;)

Cumps. J.Viana

A minha resposta não era para ti :D


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Pois eu queria seguir em frente mas está complicado.

Até no trim, nao me está a fazer nada.

Por exemplo se eu tiver uma string com um texto: "  eu quero resolver isto  "

Se colocar :

dim texto as string= "   eu quero resolver isto   "
texto.trim()

ou se colocar

dim texto as string= "   eu quero resolver isto   "
texto.trimstar()
texto.trimend()

o resultado não deveria ser : "eu quero resolver isto"

Sem espaços????

Porque nao funciona?

Hoje devo estar em dia nao! Nao consigo dar a volta a nada......


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Não, para isso tens de igualar a variável texto

Dim texto as String = "   eu quero resolver isto   "
texto = texto.TrimStart.TrimEnd


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Não, para isso tens de igualar a variável texto

Dim texto as String = "   eu quero resolver isto   "
texto = texto.TrimStart.TrimEnd

Pois ai estava mesmo a dormir.....

Bem podia tentar...

Burrice minha.

E em relação ao resto tambem sera? Possivelmente.

Mas confesso que pensei que seria mais facil obter os dados de uma string atraves de um split, em vez de andar com indices e coisas do genero.

Afinal é bem mais complicado do que parece....


Sandro Coelho

Share this post


Link to post
Share on other sites
SLIFE

Mas existe pelo menos uma maneira de vericar se um array esta em branco ou nao?


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Existe, só tens de verificar se o seu conteúdo é igual a nada


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.