Visual Basic 6

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Visual Basic 6

Mensagempor andremf » Segunda Mai 19, 2008 11:14

Boas!

Preciso de ajuda urgente.

Preciso de aceder a um ficheiro de texto por Visual Basic 6. Esse ficheiro contêm valores a que quero aceder através de uma matriz. Por exemplo, no ficheiro de texto tenho:

00001| 25 | 32 | 12 |
00002| 67 | 55 | 33 | 345 |
00003| 34 | 39 |
.
.
.
.
e assim sucessivamente.

Eu quero ter uma matriz W que por exemplo ao chamar W(2,2) me dé o valor 67 ou por exemplo W(1,3) me dé o valor 32. O delimitador é "|".

Fico à espera de respostas.

Obrigado!
andremf
Novato
Novato
 
Mensagens: 3
Registado: Segunda Mai 19, 2008 11:01

Mensagempor Fenrir » Segunda Mai 19, 2008 11:29

Boas.

Isso parece trabalho para casa....

Sabes, ninguem te vai resolver os teus TPC's, não é para isso que serve o forum, nem os TPC's.

No entanto ...

Seja como for, googlei isto para ti
http://en.allexperts.com/q/Visual-Basic ... data-1.htm

A lógico do processo, é les uma linha do ficheiro por exemplo

00001| 25 | 32 | 12 | para uma string.

e depois crias uma matriz que vai receber as respectivas posições através do parse que fazes dessa string, pelo delimitador escolhido. Se não souberes partir uma string em VB googla.

O processo repete-se linha a linha.

Isto é uma forma de resolver, como é obvio existem outras.

Se ganhares o habito de googlar por informação vais enriquecer em muito, a tua autonomia.

Se após googlares "exaustivamente" não encontrares a informação, vens aqui e nós te ajudamos.

Cumps.
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor andremf » Segunda Mai 19, 2008 13:16

Obrigado pela ajuda, mas por acaso (através da minha googlagem) já tinha chegado a essa hipótese. Só que empanquei quando tento passar a informação para uma matriz.
Penso que o Parse a que te referes é a função Split que retorna um vector de strings conforme o delimitador da string geral.
Tenho duas ideias que vou apresentá-las:

Primeira:

Penso que esta tem mais a ver com a que me apresentaste.
Leio o ficheiro linha a linha e faço o split em cada linha.

livre =freefile
Open "c:\text.txt" for input as #livre

Do while not EOF(livre)

Line Input #livre, linha ' lé o ficheiro linha a linha
v() = Split(linha, "|")
n = n+1 ' vai contando o número de linhas

Loop

Agora não sei como ir agregando as strings que vão ficando no v() para uma matriz.


Segunda:

Nesta ideia o ficheiro é lido na totalidade.
Depois faço o split das mudanças de linha e de seguida faço o split do delimitador "|".


livre =freefile
Open "c:\text.txt" for input as #livre

todo = Input(LOF(livre), livre)
v() = Split(todo,vbCrLf) 'vector com cada linha do ficheiro

For i = 0 to Ubound(v)

W() = Split(v(i), "|") 'Vector com cada elemento de cada linha

Next i


Agora, volto é a ter o mesmo problema. Não sei como ir passando W() para uma matriz.

Já "googlei" muito por matrizes bidimensionais mas não consigo avançar. Tenho difculdades em definir a matriz bidimensional( já vi exemplos em que era do tipo W( , ) ou W()() mas nenhuma funciona em VB6). Só tenho visto exemplos em que a matriz tem dimensões definidas(por exemplo W(0 to 100, 0 to 100)) mas eu penso que no meu caso tenho que ter uma matriz flexível porque eu quero ler vários ficheiros que não têm o mesmo número de linhas e ainda cada linha não tem um número fixo de colunas. No exemplo que apresentei as 3 linhas tem um número de dados(colunas) diferentes. A 1ª tem 4, a 2ª tem 5 e a 3ª tem 3.

Como podes ver já tenho uma certa "exaustão" de googlar. :)

Espero ter sido claro com as minhas dúvidas e espero que me possam continuar a ajudar.

Obrigado!
andremf
Novato
Novato
 
Mensagens: 3
Registado: Segunda Mai 19, 2008 11:01

Mensagempor Fenrir » Terça Mai 20, 2008 11:10

Boas.

Ainda bem que googlaste.

A segunda solução parece porreira, apenas cuidado com os newlines "\n"
Se possivel devias evitar ler os newlines para a matriz.

Bem, o que entendo, é que queres uma matriz dinamica, não faço ideia como se faz em VB, porque é uma linguagem que estou longe de dominar (nem gosto :D ).

O que podes fazer e é engraçado, é usar uma matriz de dimensoes fixas, mas só crias a matriz após ler do ficheiro.

Simplesmente crias uma variável para contar o numero de linhas do ficheiro (para o numero de linhas da matriz), e em cada linha contar o nº de delimitadores de cada linha que te dará o nº de colunas, mas como o nº de delimitadores é variavel de linha para linha, tens que ir percorrendo linha a linha, e descubrir a linha que tem o nº de delimitadores mais elevado, e usar esse valor como o numero de colunas para a matriz.

E assim tens a solução, sem usar matrizes dinâmicas.

Aqui tens um exemplo de arrays dinâmicos em VB
http://www.geocities.com/alpha_producti ... m#Dynaming

Mas julgo que a minha solução serve.

1) contas nº de linhas do ficheiro para uma variavel, que irá servir de linhas para a matriz.

2) conta o nº de delimitadores maximo das linhas do ficheiro, e usar esse valor como nº de colunas para a matriz.

3) criar a matriz com esses valores

4) fazer o parsing do texto para a matriz.

5) boa sorte.

[]
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor andremf » Terça Mai 20, 2008 15:07

Utilizando a solução de ler o ficheiro na totalidade comecei a implementar a tua ideia.

Dim G() as string ' A matriz que se pretende preencher

livre = freefile

Open "c:\text.txt" for input as #livre

todo = Input(LOF(livre), livre) 'O ficheiro é lido na totalidade
Max = 0

v() = Split(todo, vbCrLf)

For i = 0 to UBound(v) 'UBound(v) dá-nos o número de elementos do vector o que neste caso corresponde ao número total de linhas do ficheiro

w() = Split(v(i), "|")

NL = UBound(w()) 'NL é o número de limitadores em cada linha o que é igual a UBound(w()) que nos dá o número de elementos do vector w(). ´(Número de limitadores é igual ao número de colunas em cada linha)

If NL > Max Then
Max = NL 'Max fica com o número máximo de limitadores do ficheiro
End If
Next i


Redim G(0 to UBound(v), o to Max - 1) as String ' Defino a matriz com os valores máximos de linhas e colunas calculados anteriormente


For i = 0 to UBound(v)
For j = 0 to Max

G(i, j)= ??????????????????????

Next j
Next i


Pois é, mas como podes ver volto ao mesmo problema que já havia falado que é o que assinalas-te no teu ponto 4). Como fazer o parsing para a matriz? O que ponho a seguir áquele G(i,j) que é a matriz que quero preencher.
É essa o meu grande problema. É essa a minha grande questão que não tenho solução.


Espero que me possam continuar a ajudar. Obrigado!

[]
andremf
Novato
Novato
 
Mensagens: 3
Registado: Segunda Mai 19, 2008 11:01

Mensagempor Fenrir » Terça Mai 20, 2008 16:32

Isso nao é problema pá!

tens a string na variavel xpt

"0000011|121|0000001212|etc"

nao sei o nome da funcao, mas vais buscar a substring da posicao 0 à posicao do primeiro | ,
ou seja vais buscar 0000011 e igualas o restante à string original ou seja passa a ser "121|0000001212|etc"
e assim em diante.

Isto é manipulação de strings, da posição das strings, etc.

Informação no google não falta acerda disso.

[]
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor Fenrir » Terça Mai 20, 2008 16:34

Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor Fenrir » Terça Mai 20, 2008 16:35

Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes

cron