Ir para conteúdo
Fórum Script Brasil
  • 0

Duas Duvidas Numa


rodfraga

Pergunta

Fala galera... Eu tenho duas duvidas numa tacada só. rolleyes.gif

Primeiro. Como eu faço para que meu programa possa abrir outros arquivos? Exemplo, que ele possa abrir todos os arquivos de extensao .blc? E que essa extensao seja caracterisitca do meu programa?

E outra, eu to fazendo uma linguagem de programação(par apoder aprender e tetnar continuar a XScript já que o Graymalkin deixou), e estou fazendo uma parte que o Graymalkin disse ser facil mas eu to passando por mais lençois. dry.gif

É a parte de guardar variáveis

Vou por todo o código relacionado a essa parte aqui ok? Eu não acho erro, alias, nem o VB, porem nada é executado.

Se alguém puder ajudar...

'No botao que compila e executa o meu teste
Dim sintax As New BMain
Private Sub ver_Click()
Dim lines() As String
lines() = Split(Text1.Text, vbCrLf)
For i = LBound(lines) To UBound(lines)
sintax.compilador (lines(i))
Next i
End Sub

'na classe BMain:

Private Type VarType
nome As String
valor As Variant
End Type
Public Function interpretador(linha As String)
On Error Resume Next
'Para variáveis:
Dim stringa As String, pdivVars() As String
Dim listName As Object
If Left(linha, 2) = "V#" Or Left(linha, 2) = "v#" Then
stringa = Split(linha, "#")(1)
pdivVars() = Split(stringa, ", ")
Call guarda_vars(pdivVars())
End If
If Left(linha, 7) = "showVar" Then
stringa = Split(linha, "=")(1)
listName = stringa
Call mostrar(listName)
End If
End Function

Public Function guarda_vars(nome() As String)
On Error Resume Next
Dim unk
unk = UBound(var)
If Err.Number = 9 Then
For i = LBound(nome) To UBound(nome)
var(i).nome = nome(i)
Next i
Else
For i = LBound(nome) To UBound(nome)
n = UBound(var) + 1
ReDim Preserve var(n)
var(n).nome = nome(i)
Next i
End If
End Function


Public Function mostrar(list As Object)
For i = LBound(var) To UBound(var)
list.AddItem (var(i).nome)
Next i
End Function
Eu criei a funação mostrar para poder ver se o trocinho tava guardando as variaveis direitinho. Eu digitei no txt de codigo:
v#teste, teste1
showVar=List1

então, não faz nada esse codigo "todo" dry.gif

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Fala galera... Eu tenho duas duvidas numa tacada só. 

Opa !!!

Manda aí....

Primeiro. Como eu faço para que meu programa possa abrir outros arquivos? Exemplo, que ele possa abrir todos os arquivos de extensao .blc? E que essa extensao seja caracterisitca do meu programa?

Bom, dê uma olhadinha nesse post wink.gif

Agora, com relação ao código....depois eu dô uma olhadinha pois minha mãe tá aqui me enchendo para eu deixar ela "teclar" como diz ela tongue.gif

hehehe...

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

  • 0

Num funciona... sad.gif

Detalhe: Acho que ta em guardar variaveis, pois fiz o seguinte na funçço mostrar:

For i = LBound(var) To Ubound(var)
AID.List1.Additem(var(i).nome)
Next i

E ainda não adiciona na lista

Link para o comentário
Compartilhar em outros sites

  • 0

Realmente, foi só tirar os On Error Resume Next que ele me revelou diversos erros. Um deles é que havia referência a um vetor chamado Vars que não havia sido declarado em lugar algum. O outro problema é que ao detectar que não existe nada em Vars o índice do primeiro item deveria ser explicitamente 0, depois é que deveria ser UBound(Var) + 1. Segue o cógido todo:

'No form:
Dim sintax As New BMain

Private Sub Form_Load()
    Text1.Text = "v#teste, teste1" & vbCrLf & "showVar=List1"
End Sub

Private Sub ver_Click()
    Dim lines() As String
    lines() = Split(Text1.Text, vbCrLf)
    For i = LBound(lines) To UBound(lines)
        sintax.interpretador (lines(i))
    Next i
End Sub
'Na BMain
Dim Var() As VarType
Private Type VarType
    nome As String
    valor As Variant
End Type
Public Function interpretador(linha As String)
'On Error Resume Next
    'Para variáveis:
    Dim stringa As String, pdivVars() As String
    'Dim listName As Object
    If Left(linha, 2) = "V#" Or Left(linha, 2) = "v#" Then
        stringa = Split(linha, "#")(1)
        pdivVars() = Split(stringa, ", ")
        Call guarda_vars(pdivVars())
    End If
    'If Left(linha, 7) = "showVar" Then
    '   stringa = Split(linha, "=")(1)
    '   listName = stringa
    '   Call mostrar(listName)
    'End If
End Function

Public Function guarda_vars(nome() As String)
    Dim unk
    On Error Resume Next
    unk = UBound(Var)
    erro = Err.Number
    On Error GoTo 0
    If erro = 9 Then
        For i = LBound(nome) To UBound(nome)
            If i = 0 Then
                n = 0
            Else
                n = UBound(Var) + 1
            End If
            ReDim Preserve Var(n)
            Var(n).nome = nome(i)
        Next i
    Else
        For i = LBound(nome) To UBound(nome)
            Var(i).nome = nome(i)
        Next i
    End If
End Function

Public Function mostrar(list As Object)
    For i = LBound(Var) To UBound(Var)
        list.AddItem (Var(i).nome)
    Next i
End Function
Ah, e o ShowVar nunca vai funcionar desse jeito. Não há como executar códigos dinâmicamente no VB (infelizmente, sad.gif ), portanto não há como relacionar string "List1" com o objeto List1 existente no form. A não ser, é claro que você faça isso de forma explícita (supondo que sNome é uma variável string que tem o nome do objeto que você quer):
if sNome = "List1" then
  set obj = List1
elseif sNome = "List2" then
  set obj = List2
endif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, o erro do vars vai ai mesmo, pois veja:

Eu não copiei o código todo

E esqueci do detalhe da declaração dele lá em cima. unsure.gif

Bem, eu vou tirar os Resume Next e ver

Obrigado

Rodrigo

EDITADO

Realmente, dá um caminhao de erros. Vou tentar o seu código pra ver se dá certo e ver quais as diferenças pro meu.

Editado

Num é que deu certo blink.gif

Por que que os erros só vem comigo dry.gif ?

Bem, eu mudei a função mostrar para:

Public Function mostrar()
   For i = LBound(Var) To UBound(Var)
       MsgBox Var(i).nome, vbInformation, "VARIAVEIS"
   Next i
End Function

Tirei os comentarios da parte em relação a mostrar na função interpretador, e tambem fiz com que baste o comando showVar para que possa mostrar em msgsboxes o conteudo.

blink.gif

Eu realmente estou deprimido depois dessa dry.gif Quase nenhum código meu vai pronto sem alteração do povo daqui ou até total reformulação dry.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Eu realmente estou deprimido depois dessa dry.gif Quase nenhum código meu vai pronto sem alteração do povo daqui ou até total reformulação dry.gif

Fica assim não. Isso é assim mesmo. smile.gif As vezes isso também ocorre comigo com frequência. Daí, apago tudo e começo a fazer de novo. E, se ainda não consigo, deixo pra lá. Daí, após algum tempo (dias, semanas, meses ou anos (?)), inevitavelmente acabo tentando fazer de novo, e quase sempre tenho sucesso. biggrin.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Mas esperar um ano hein... Eu nem ia lembrar mais do projeto

Hehehehehe....

Mas comigo também é assim cara...Eu quando não consigo ou vejo que vai me dar muito trabalho (principalmente quando eu programo na sexta de madrugada) eu deixo prá lá e daqui alguns dias (ou no máximo semanas) eu vou e consigo fazer....Acho que acontece com todos ! huh.gif

heheheh tongue.gif

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, ainda bem que é com todos. Espero daqui a um tempo atingir um certo nivel. Até porque VB vai ficar um pouquinho mais simples quando eu olhar mais a fundo Java ou C++(to vendo o basico dos dois pra ver qual mais gosto e qual pego)tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, ainda bem que é com todos. Espero daqui a um tempo atingir um certo nivel. Até porque VB vai ficar um pouquinho mais simples quando eu olhar mais a fundo Java ou C++(to vendo o basico dos dois pra ver qual mais gosto e qual pego

Pouquinho...... mellow.gif

hehehehe tongue.gif

Se tu se aprofundar em Java ou C++ o VB vai ficar mais fácil do que mexer em Windows biggrin.gif

hehehe tongue.gif

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

  • 0

Galera, eu sei que eu já tinha visto o codigo do Graymalkin, mas eu tava sem internet e precisava ver como ficava, ai não abria a internet sad.gif E eu tirei todos os Resume Next pra ver como ficava... Consegui uma solução minha(claro, depois de ter aprendido com o codigo do Graymalkin... mas pelo menos o codigo não ficou copia!!!! laugh.gif )

Ai vai:

'No form ta a mesma coisa, apesar de que eu decidi que eu vou fazer uma dll(ou activex exe, sei lá, vou ver), ou seja, não havera form para codigo, apenas os interpretadores teram(como se fosse enxer de interpretador, alem do meu :P). Eu deixei o form só como teste.

'Na classe:
Private Type VarType
nome As String
valor As Variant
End Type
Private var() As VarType
Public Function interpretador(linha As String)
'Para variáveis:
Dim stringa As String, pdivVars() As String
Dim listName As Object
If Left(linha, 2) = "V#" Or Left(linha, 2) = "v#" Then
stringa = Split(linha, "#")(1)
pdivVars() = Split(stringa, ", ")
Call guarda_vars(pdivVars())
End If
If Left(linha, 7) = "showVar" Then
Call mostrar
End If
End Function
Public Function guarda_vars(nome() As String)
On Error GoTo addPrim
Dim unk, n As Long
unk = UBound(var)
For i = LBound(nome) To UBound(nome)
n = UBound(var) + 1
ReDim Preserve var(n)
var(n).nome = nome(i)
Next i
Exit Function
addPrim:
If Err.Number = 9 Then
For i = LBound(nome) To UBound(nome)
ReDim Preserve var(i)
var(i).nome = nome(i)
Next i
End If
End Function
Public Function mostrar()
For i = LBound(var) To UBound(var)
MsgBox var(i).nome, vbInformation, "VARIAVEIS"
Next i
End Function

Essa foi a parte das variaveis até aonde fiz!

Valeu!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui uma solução minha(claro, depois de ter aprendido com o codigo do Graymalkin... mas pelo menos o codigo não ficou copia!!!!  )

Fez bem brother....

Quando o pessoal passa o código, acho que se deve estudar o código postado e não fazer uma cópia do mesmo....Acho que muitos deveriam seguir o seu exemplo ! biggrin.gif

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

  • 0

hehe... que bom que c acha!!!...

Rodrigo

Editado

Ow, eu tenho outra duvida... Mas dessa vez se voces pudessem dar só dicas tongue.gif , pois eu quero tentar meu codigo cool.gif

Olha como ta o codigo(acrescentei a parte de dar valrores para as variaveis):

Private Type VarType
nome As String
valor As Variant
End Type
Private var() As VarType
Public Function interpretador(linha As String)
'Para variáveis:
Dim stringa As String, pdivVars() As String, i As Long, n As Long
Dim listName As Object, valorPvar As Variant, vashow As Boolean
If Left(linha, 2) = "V#" Or Left(linha, 2) = "v#" Then
stringa = Split(linha, "#")(1)
pdivVars() = Split(stringa, ", ")
Call guarda_vars(pdivVars())
End If
If Left(linha, 12) = "showVar.nome" Then
vashow = True
Call mostrar(vashow)
End If
If Left(linha, 13) = "showVar.value" Then
vashow = False
Call mostrar(vashow)
End If
If vetorVazio(var) = False Then
For i = LBound(var) To UBound(var)
If Left(linha, Len(var(i).nome)) = var(i).nome And Mid(linha, Len(var(i).nome), Len(var(i).nome) + 1) = "=" Then
valorPvar = Split(linha, "=")(1)
Call pegaValor(var(i).nome, valorPvar)
End If
Next i
End If
End Function
Public Function guarda_vars(nome() As String)
Dim n As Long
If vetorVazio(var) = True Then
For i = LBound(nome) To UBound(nome)
ReDim Preserve var(i)
var(i).nome = nome(i)
Next i
Else
For i = LBound(nome) To UBound(nome)
n = UBound(var) + 1
ReDim Preserve var(n)
var(n).nome = nome(i)
Next i
End If
End Function
Public Function pegaValor(nome As String, valor As Variant)
For i = LBound(var) To UBound(var)
If var(i).nome = nome Then
var(i).valor = valor
End If
Next i
End Function
Public Function mostrar(nova As Boolean)
If vetorVazio(var) = False Then
If nova = True Then
For i = LBound(var) To UBound(var)
MsgBox var(i).nome, vbInformation, "VARIAVEIS"
Next i
Else
For i = LBound(var) To UBound(var)
MsgBox var(i).nome & " = " & var(i).valor, vbInformation, "VALORES DAS VARIAVEIS"
Next i
End If
Else
MsgBox "Você não declarou variáveis a esta altura", vbInformation + vbOKOnly, "Erro de Sintaxe da linguagem Rio 1.0"
End If
End Function
Private Function vetorVazio(vetor() As VarType)
On Error GoTo addPrim
Dim unk
unk = UBound(var)
vetorVazio = False
addPrim:
If Err.Number = 9 Then
vetorVazio = True
End If
End Function
Era pra funcionar perfeitamente bem, pelo menos na minha cabeça. Refiz e tal. Ficaria assim, pra mim. Não dá erro. Porem eu digito o seguinte codigo:
v#rodrigo
rodrigo=eu
showVar.value

E aparece uma msgbox dizendo:

rodrigo =

Só isso... alguém tem ideia de por que isso? dry.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Já que você apenas quer a dica, o erro está na seguinte linha:

If Left(linha, Len(var(i).nome)) = var(i).nome And Mid(linha, Len(var(i).nome), Len(var(i).nome) + 1) = "=" Then

Qual o tamanho (comprimento, quantidade de caracteres) em "="?

E, cara, indenta (ou endenta, ou identa, já que não há um consenso sobre a palavra) esse código.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Identar (ou qualquer uma das variantes) é colocar espaçamentos na frente do código a fim de facilitar a leitura. Exemplo:

do while a=2
for i=1 to 10
if i=3 and a=1 then
msgbox "blá"
else
msgbox "blé"
endif
next
loop
O código acima identado ficaria assim:
do while a=2
    for i=1 to 10
        if i=3 and a=1 then
            msgbox "blá"
        else
            msgbox "blé"
        endif
    next
loop

Muito mais fácil de ler, não acha? Especialmente em códigos gigantescos.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
É fica mais legivel. Mas haja paciencia... blink.gif

Claro, identar um código já pronto é meio chato. Todavia, no meu caso, já idento automaticamente enquanto escrevo o código. Ou seja, após digitar uma linha com um if, for ou do while e teclar ENTER, já teclo TAB. Além disso, você pode identar (TAB) ou desidentar (SHIFT+TAB) várias linhas selecionadas.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Mas por exemplo... Eu tenho o seguinbte código:

Private Sub form_load()
For i = 1 to 100
Command1(i).Caption = ""
Next i
If Command1(30).Caption = "" Then
Print "certo"
Else
Print "errado"
End If
End Sub
Ele ficaria assim:
Private Sub Form_load()
For i = 1 to 100
    Command1(i).Caption = ""
Next i
If Command1(30).Caption = "" Then
    Print "certo"
        Else
    Print "errado"
End If
End Sub

Certo? Porque sei lá. É estranho... Parece que tem regrinha, pra ficar parecendo com uma "árvore"... Se é que voce me entende.

Link para o comentário
Compartilhar em outros sites

  • 0

Quase. Na verdade ele ficaria assim:

Private Sub Form_load()
    For i = 1 to 100
       Command1(i).Caption = ""
    Next i
    If Command1(30).Caption = "" Then
       Print "certo"
    Else
       Print "errado"
    End If
End Sub

A idéia é aninhar (conter) os códigos que são executados "dentro" da instrução. Por isso, If e Else ficam na mesma direção (ou executa um ou executa outro). Todas as instruções que são executadas no mesmo nível (For e If, no exemplo acima) ficam no mesmo nível. Como todo o código fica "dentro" de uma sub, todos são identados em um nível e todas as linhas que são executadas "dentro" das instruções são identadas em mais um nível. Sacou? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Saquei biggrin.gif

então... Ah eu queria saber o que voce queria dizer com If's aninhados(na XScript)... Agora descobri? tongue.gif

Ifs aninhados seriam Ifs dentro de Ifs. Por exemplo:

if a=2 then
  if b=3 then
    msgbox "blá"
  else
    if c=4 then
      msgbox "blé"
    else
      msgbox "bli"
    endif
  endif
endif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...