Programacion visual basic

risk6666

Buenas, estoy haciendo un programa con VBasic para la universidad y estoy bastante perdido:

Escrive un programa que:
Cuente el numero de registros que hay en el archivo y escrivelo en la tercera fila i columna
de la hoja de calculo.
Si el nucleotido inicial es "A" copiar el nº de acceso del registro en el archivo RES1_M10.txt.
En caso contrario:
• Identifica la posición donde se encuentra un cuarteto dado por el usuario por pantalla.
Presenta el resultat en un cuadro de dialogo.
• Calcula el percentage de pares de bases (AA, AG, AC, ...) en cada registre.
Observa que hay 16 posibles pares de bases, matricialmente són 4 files
con 4 columnes. El resultat se escrive en el archivo RES2_M10.txt indicando en cada
registro su nº de acceso.
• Cuente cuantas secuencies comienzan por cada nucleotido RES3_M10.txt

El archivo que tiene que leer es un documento de texto de este tipo:

Cada registro viene determinado por el simbolo ">" y posteriormente la cadena con la que tenemos que trabajar decada registro. Eso si, el documento con el que tengo que trabajar contiene unos 90000 registros.

embl|EE297496|EE297496 E1F02PZ.SEQ Subtracted cDNA library of Plumbago zeylanica Sua sperm cell Plumbago zeylanica cDNA, mRNA sequence.
agggaggtttgcggggcgcccnccttctcctctgtgggtgtgttcggtgggnngggnggg
gtattaacttgaccccagcgcgccaagtttgacgtgtgggaacnngagagtacccccgaa
embl|EE297577|EE297577 E3D01PZ.SEQ Subtracted cDNA library of Plumbago zeylanica Svn sperm cell Plumbago zeylanica cDNA, mRNA sequence.
agttaaatataaaggntaagttataaaagtttcttcgccgcgcgcgccggnggnggacta
cttgacatcaccgcctagtttataggtgatacantgagncntcccgtaatctacattatg

ALguine tiene idea??

JuAn4k4

¿ Y donde esta el programa que estas haciendo ? "Estoy haciendo un programa..."

Amazon

Eso, ponnlos lo que llevas hechoxD

Vaya hoygan de profesor o de transcriptor..

edit: ok ers catalan o algo de eso fallo mio <3

PaCoX

En que estas perdido, no entiendes el enunciado? no sabes leer un archivo desde vb? no sabes que es vb?

B

http://msdn.microsoft.com/en-us/library/aa711203%28VS.71%29.aspx

archienemigo

Cuenta los retornos de carro que hay para leer todos los registros que hay, en VB no se si era "/n" o "chr(13)". O cuenta cada vez que sale el simbolo ">".

No digo nada mas por que paso de leer español/cristiano/hoygan.

risk6666

jajaja, esque estoy estudiando en barcelona y e traducido rapido el enunciado pa ponerlo aqui y m saltao cosas. Lo que llevo echo esta aqui:

Public Sub M10()

Dim cuartet As String, posicion As Integer, cadena As String, cadenatotal As String, longitud As Integer
Dim linea As String, longseq As Integer, registro As String, n As Integer, j As Integer, i As Integer
Dim mat(999, 999) As Integer, secuencia() As String

Open "C:\apl\INPUT_M10.txt" For Input As #1
Open "c:\apl\RES1_M10.txt" For Output As #2
Open "C:\RES2_M10.txt" For Output As #3
Open "c:\RES3_M10.txt" For Output As #4

Do While Not EOF(1)

Line Input #1, linea

If Left(linea, 1) = ">" Then
registro = linea
n = n + 1

Else
cadena = linea
cadena = LCase(Trim(cadena))
cadenatotal = cadenatotal & cadena
longseq = Len(cadenatotal)
End If
If Left(cadenatotal, 1) = "A" Then
Print #2, "El numero de registro es "; n
Else
cuartet = InputBox("Introduzca el cuarteto que quiere buscar")
posicion = InStr(cadenatotal, "cuartet")
MsgBox "El cuarteto esta en el " & n & "registro, en posicion " & posicion
End If

For i = 1 To longseq
Select Case UCase(Mid(Trim(cadenatotal), i, 1))
Case "A"
secuencia(i) = 0
Case "T"
secuencia(i) = 1
Case "C"
secuencia(i) = 2
Case "G"
secuencia(i) = 3
Case Else
secuencia(i) = 4
End Select

Next i

For i = 1 To 4


    For j = 1 To 4
        
        mat(i, j) = 0
        
    Next j
Next i

For i = 1 To longseq - 1
mat(secuencia(i), secuencia(i + 1)) = mat(secuencia(i), secuencia(i + 1)) + 1
Next i

For i = 0 To 3
For j = 0 To 3


    Print #2, mat(i, j) = mat(i, j) / (longseq / 2)
    
    
Next j

Next i

Loop
Cells(3, 3) = n
Close #1, #2, #3, #4
End Sub

pero tengo bastantes fallos, aver q opinais

risk6666

Veo que no hay mucha ayuda, xd

PaCoX

1º Analiza el problema y escribe el posible algoritmo, luego traducelo al vb. Postea ese algoritmo, pork el problema t viene d ahi no de saber o no saber vb.

2º Si trabajas con strings trabaja en mayusculas o minusculas... no hagas un lcase y luego me compares con una A..

3º posicion = InStr(cadenatotal, "cuartet" ) ... "cuartet" y cuartet no es lo mismo.

risk6666

Public Sub M10()

Dim cuartet As String, posicion As Integer, cadena As String, cadenatotal As String, longitud As Integer
Dim linea As String, longseq As Integer, registro As String, n As Integer, j As Integer, i As Integer
Dim mat(999, 999) As Integer, secuencia() As String

Open "C:\apl\INPUT_M10.txt" For Input As #1
Open "c:\apl\RES1_M10.txt" For Output As #2
Open "C:\RES2_M10.txt" For Output As #3
Open "c:\RES3_M10.txt" For Output As #4

Do While Not EOF(1)

Line Input #1, linea

If Left(linea, 1) = ">" Then

n = n + 1
registro(n) = linea

Else
cadena = linea
cadena = LCase(Trim(cadena))
cadenatotal(n) = cadenatotal(n) & cadena
longseq = Len(cadenatotal(n))
End If
Loop


For i = 1 To n

If Left(cadenatotal(i), 1) = "A" Then
    Print #2, "El numero de registro es "; n
        Else
        cuartet = InputBox("Introduzca el cuarteto que quiere buscar")
        posicion = Mid(cadenatotal(i), cuartet)
        MsgBox "El cuarteto esta en el " & n & "registro, en posicion " & posicion
End If



For j = 1 To longseq

    Select Case UCase(Mid(Trim(cadenatotal(i)), j, 1))
        Case "A"
            secuencia(j) = 0
        Case "T"
            secuencia(j) = 1
        Case "C"
            secuencia(j) = 2
        Case "G"
            secuencia(j) = 3
        Case Else
            secuencia(j) = 4
    End Select
Next j

    For k = 1 To 4
        
        For j = 1 To 4
            
            mat(k, j) = 0
            
        Next j
    Next k

                            
For j = 1 To longseq - 1
  mat(secuencia(j), secuencia(j + 1)) = mat(secuencia(j), secuencia(j + 1)) + 1
  Ncomp = Ncomp + 1
Next j


For k = 0 To 3
    For j = 0 To 3
        
        Print #2, mat(i, j) / Ncomp
        
        
    Next j
Next k

Next i
Cells(3, 3) = n
Close #1, #2, #3, #4
End Sub

PaCoX

Según la estructura que has puesto la primera fila identifica el registro y no seria parte de una secuencia por lo que deberías ignorarla o usarla para identificar el registro en tu programa.
Después de la identificación vienen 2 secuencias que no entiendo por el enunciado si las tienes que tratar juntas o separadas.
las secuencias vienen todas en minúscula por lo que no tienes que hacer ni lcase ni ucase...
cuando te habla sobre pares de bases se refiere a una matriz de combinacion de CITOSINA, GUANINA, ADENINA y TIMINA
aa ag ac at
ga gg gc gt
ca cg cc ct
ta tg tc tt
y te pide PORCENTAJE no una cuenta, crea una matriz de esas dimensiones
seria algo asi
variables:
linea , secuencia, nregistro, nCITOSINA, nGUANINA, nADENINA, nTIMINA
inicio:
mientras no fin de fichero hacer
leer linea
si izquierda(1,linea) = '<' entonces
nregistro <- nregistro+1
si tamaño(secuencia) > 0 entonces
si izquierda(1,secuencia) = 'a' entonces
escribir nregistro en RES1_M10.txt
nADENINA<-nADENINA+1
sino
escribir buscar_cuarteto(secuencia)
escribir calcular_porcentajes(secuencia) en RES2_M10.txt
si izquierda(1,secuencia) = 'c' entonces nCITOSINA<-nCITOSINA+1
si izquierda(1,secuencia) = 'g' entonces nGUANINA<-nGUANINA+1
si izquierda(1,secuencia) = 't' entonces nTIMINA<-nTIMINA+1
finsi
secuencia<-0
finsi
sino
secuencia<-secuencia + linea
finsi
fin mientras

FUNC calcular_porcentajes( secuencia: cadena): tabla[4][4]
FUNC buscar_cuarteto( secuencia: cadena): NATURAL

risk6666

No consigo crear tu algoritmo, no podrias escribirlo entero el programa ya pq no lo acabo de comprender....peor creo q se por dnde vas

Saharabbey

#12 Vas de culo si pretendes que te programen otros.

Como ya te han dicho, el error es de concepto. Si tuvieses claro qué quieres hacer y cómo hacerlo, pasarlo a VB sería 0 problemas (nada más que buscar las funciones necesarias o implementarlas).

PD: En MV no te hacemos los deberes.

risk6666

Pero esque tengo errores como, indice fuera del intervalo, al construir ese algoritmo, el concepto lo tengo pero no se me ejecuta. Yo no soy programador, por eso pido ayuda.

Mira, me sale un error, pq lo q qiero leer son los registros q no m sirven y contabilizarlos, peor luego qiero trabajar, cada vez que el programa encuentra un registro. Por eso utilizo registro(n) = linea, pero ai ya m dice indice fuera del intervalo, por que

PaCoX

la variable registro la tienes declarada como string y no como una matriz/vector de strings

busca en google matrices en vb6

risk6666

E canviado las variables registro y cadenatotal como un matriz, lo q pasa q lo ice antes de postearlo, y el error sigue siendo el mismo, subindice fuera del intervalo, no se

B

#16 En castellano para que podamos responderte, por favor.

Usuarios habituales