lunes, 23 de julio de 2012

Archivos

Para abrir archivos tenemos una serie de métodos como estos: http://references.valadoc.org/#!api=glib-2.0/GLib.FileStream . En este caso
hemos creado una variable f que será el archivo en modo lectura. Los datos se meterán en "a" a través del método f.gets(a) y nosotros los pasamos a una cadena creada con StringBuilder (Constructor de cadenas) en la variable bu y lo metemos una lista de Gee(atención al compilar usar --pkg gee-1.0 ).

Para aprender el funcionamiento de Stringbuilder. Por ejemplo para crear una cadena a partir de variables tipo caracter. http://references.valadoc.org/#!api=glib-2.0/GLib.StringBuilder


[indent=4] uses Gee init var f = FileStream.open("/home/gontzal/for","r") var a = new array of char[1000] var bu = new StringBuilder () var lista =new list of string while f.gets(a)!= null for s in a do bu.append_c(s) lista.add (bu.str) bu.erase() for h in lista stdout.printf(h)

6 comentarios:

  1. oye amigo disculpa las molestias pero este tema lo he probado de muchas maneras y siempre al correrlo me dice
    "violacion de segmento"
    este es el codigo
    [indent=4]

    uses Gee
    init
    var f = FileStream.open("/home/gontzal/for","r")
    var a = new array of char[1000]
    var bu = new StringBuilder ()
    var lista =new list of string

    while f.gets(a)!= null
    for s in a do bu.append_c(s)
    lista.add (bu.str)
    bu.erase()

    for h in lista

    stdout.printf(h)

    ResponderEliminar
    Respuestas
    1. Supongo que habrás creado un archivo y lo habrás abierto poniendo el correspondiente nombre aqui: FileStream.open("nombre_de_archivo","r")

      Un saludo.

      Eliminar
  2. amigo gracias si tenia mal el nombre del archivo pero no era el nombre que puse aqui sino otro lo habia probado pero resulta que tenia una letra de mas y por ponerle un nombre tan largo no me di cuenta. pero gracias por tu ayuda y paciencia.

    ResponderEliminar
  3. oye ¿por que no se usa simplemente un string para leer la informacion del archivo? en lugar de hacer un array de char? ¿por que tiene que ser tan complicado?

    ResponderEliminar
    Respuestas
    1. Si tienes razón se puede hacer como tu indicas. Aquí tienes un ejemplo:
      // abriendo
      this.todas_palabras.clear();
      f = FileStream.open(directorio_datos+archivo,"r")
      if f!=null
      c=""
      c=f.read_line()
      while not f.eof()
      this.todas_palabras.add(c)
      c=f.read_line()

      Eliminar
  4. muchas gracias por tu ayuda Gontzal, no queria que se viera mal mi comentario anterior que pareciera algo pesado no es mi intension se ve asi por las palabras pero muchas gracias ¿por que es que no me deja declarar variables antes de init pero si de otra forma sin la palabra variable lo pusé asi
    [indent=4]

    cadena:string
    init
    var f=FileStream.open("archivogenielee.text","r")
    if f!=null
    cadena = "cadena vacia"
    cadena = f.read_line()
    print cadena
    while not f.eof()
    cadena = f.read_line()
    stdout.printf("%s", cadena)

    pero no pude declarar la variable con la palabra Var antes de init, otro problema que encuentro es que el print no imprime un estring tiene que ser con printf() no se por que

    ResponderEliminar