elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Scripting / Re: [Python] ABM archivo de texto en: 6 Julio 2016, 00:24 am
Por cierto, si algún día estás interesado en hacer este mismo "reto" pero de forma profesional, puedo enseñarte como hacerlo, verás que es mucho más fácil que como tú lo haces, pero hay que conocer las herramientas adecuadas.

hola si bienvenido cualquier sugerencia para mejorar, me dejas tu correo por MP o como nos comunicamos para ensenarme? gracias y saludos
12  Programación / Scripting / (Python) Indexado de archivo de texto en: 5 Julio 2016, 06:31 am
Buenas gente, alguno me puede tirar una ayuda de como hacer lo siguiente? la idea es que tengo un archivo de clientes donde cada linea del mismo representa un registro y los campos separados por coma, los mismos inician con posición inicial y final de 0. el otro archivo es de facturas que se le confeccionan a un cliente con los campos registro siguiente y anterior, como puedo hacer para una vez que se carga la factura se alteren los campos pos_ini con la posición que va a ocupar el primer registro en el archivo de facturas y así ir alterando los campos. la idea general es poder acceder al archivo de factura con un código de cliente y acceder a sus registros sin leer todo el archivo completo de manera secuencial, o si alguno saber otra manera de hacerlo para conseguirlo.



desde ya gracias
13  Programación / Scripting / Re: [Python] ABM archivo de texto en: 4 Julio 2016, 03:53 am
Hola, nos cuentas pocas cosas como para tener un conocimiento total del problema. Te indico cosas que veo:

Python es un lenguaje que permite programar de mil formas diferentes. El código que veo, me recuerda mucho a Java y la obsesión con hacer programación orientada a objetos pura, lo cual solo sirve para complicar el código y hacer los programas más grandes y aburridos.

Luego, veo que estás usando como estructura de datos para los bancos una lista: banks = [].
No se si conoces ya los diccionarios. Un diccionario permite almacenar datos mediante una clave, en vez de tenerlos todos en una lista "lineal".

El símbolo para declarar un diccionario vacío es: {}
Ejemplo:

self.banks = {}

De esta forma, como supongo que los "id" de los bancos serán únicos, puedes usar la propia "id" de un banco para obtenerlo, en vez de recorrer toda la lista hasta encontrarlo (método search).

Ejemplo:

def search(self, id):
  if id in self.banks:  return self.banks[id] # si existe lo devuelvo
  else: return None  # devuelvo None porque no existe


Te recomiendo que la función save, genere un archivo nuevo, borrando todo lo que hubiera con anterioridad. Es decir, volcando una copia de banks al archivo. Todo será mucho más simple.

No se si tienes restricciones a la hora de usar unas determinadas cosas, no se si te han dado ya un diseño de como tienes que hacerlo y te han quitado la libertad de hacerlo como tú quieras.

Dinos hasta dónde eres libre para hacerlo como tú quieres, y si tienes libertad entonces te haré un programa bien hecho, con la mitad de líneas o menos que funciona muy bien y es mucho más simple de entender y programar, que es la filosofía de python.
El diseño que tú has seguido es una Programación Orienta a Objetos clásica, muy noventera, pero estamos en 2015, eso ya no está de moda ;D






Hola no tengo ningún tipo de restricción para hacerlo, estoy aprendiendo así que si ves una mejor solución bienvenida sea. si conozco los diccionarios pero no lo habia pensado y seria mejor que usar clase. desde ya gracias por comentar



con respecto al problema es hacer un alta, baja, modificación o CRUD como quieras llamarle de banco con los atributos id y descripción.



Hola, nos cuentas pocas cosas como para tener un conocimiento total del problema. Te indico cosas que veo:

Python es un lenguaje que permite programar de mil formas diferentes. El código que veo, me recuerda mucho a Java y la obsesión con hacer programación orientada a objetos pura, lo cual solo sirve para complicar el código y hacer los programas más grandes y aburridos.

Luego, veo que estás usando como estructura de datos para los bancos una lista: banks = [].
No se si conoces ya los diccionarios. Un diccionario permite almacenar datos mediante una clave, en vez de tenerlos todos en una lista "lineal".

El símbolo para declarar un diccionario vacío es: {}
Ejemplo:

self.banks = {}

De esta forma, como supongo que los "id" de los bancos serán únicos, puedes usar la propia "id" de un banco para obtenerlo, en vez de recorrer toda la lista hasta encontrarlo (método search).

Ejemplo:

def search(self, id):
  if id in self.banks:  return self.banks[id] # si existe lo devuelvo
  else: return None  # devuelvo None porque no existe


Te recomiendo que la función save, genere un archivo nuevo, borrando todo lo que hubiera con anterioridad. Es decir, volcando una copia de banks al archivo. Todo será mucho más simple.

No se si tienes restricciones a la hora de usar unas determinadas cosas, no se si te han dado ya un diseño de como tienes que hacerlo y te han quitado la libertad de hacerlo como tú quieras.

Dinos hasta dónde eres libre para hacerlo como tú quieres, y si tienes libertad entonces te haré un programa bien hecho, con la mitad de líneas o menos que funciona muy bien y es mucho más simple de entender y programar, que es la filosofía de python.
El diseño que tú has seguido es una Programación Orienta a Objetos clásica, muy noventera, pero estamos en 2015, eso ya no está de moda ;D




Algo así, le hice los cambios que me sugeriste:
Código
  1. class Banks:
  2.  
  3.    def __init__(self, filename):
  4.        self.filename = filename
  5.        self.banks = {}
  6.        self.load()
  7.  
  8.    def upload_in_memory(self, f):
  9.        for line in f.readlines():
  10.            record = line.split(',')
  11.            id = record[0].strip()
  12.            description = record[1].strip()
  13.            self.banks[id] = description
  14.  
  15.    def load(self):
  16.        try:
  17.            f = open(self.filename, 'r')
  18.            self.upload_in_memory(f)
  19.        except IOError:
  20.            return
  21.  
  22.    def search(self, id):
  23.        if id in self.banks:
  24.            return self.banks[id]
  25.        return None
  26.  
  27.    def to_s(self, id, description):
  28.        return "{0:4.4},{1:30.30}\n".format(id, description)
  29.  
  30.    def save(self):
  31.        f = open('maebancos.txt', 'w')
  32.        for key, value in self.banks.items():
  33.            record = self.to_s(key, value)
  34.            f.write(record)
  35.        f.close()
  36.  
  37.    def add(self, id):
  38.        bank = self.search(id)
  39.        if not bank:
  40.            description = raw_input("Descripcion: ")
  41.            self.banks[id] = description
  42.            self.save()
  43.            print "{0} dado de alta con exito!!!".format(description)
  44.            pause()
  45.        else:
  46.            print "El Banco ya ha sido dado de alta!!"
  47.            pause()
  48.  
  49.    def delete(self, id):
  50.        bank = self.search(id)
  51.        if bank:
  52.            print "Codigo de banco: {0}\nDescripcion: {1}".format(id, bank)
  53.            opc = raw_input("Baja (B) Cancelar (C)").upper()
  54.            if opc == 'B':
  55.                del self.banks[id]
  56.                self.save()
  57.                print "{0} dado de baja con exito!!".format(bank)
  58.                pause()
  59.        else:
  60.            print "El banco no existe!!"
  61.            pause()
  62.  
  63.    def update(self, id):
  64.        bank = self.search(id)
  65.        if bank:
  66.            print "Codigo de banco: {0}\nDescripcion: {1}".format(id, bank)
  67.            print "Anote el nuevo dato"
  68.            description = raw_input("Descripcion: ")
  69.            self.banks[id] = description
  70.            self.save()
  71.            print "{0} modificado con exito!!!".format(bank)
  72.            pause()
  73.        else:
  74.            print "El banco no existe!!"
  75.            pause()
  76.  
  77.  
  78. def pause():
  79.    raw_input("Oprima una tecla para continuar")
  80.  
  81.  
  82. def input_code():
  83.    while True:
  84.        try:
  85.            bank_code = raw_input("Codigo Banco: ")
  86.            return bank_code
  87.        except ValueError:
  88.            print "Presta atencion, solo digitos!!"
  89.  
  90. def menu():
  91.    while True:
  92.        prompt = "1) Alta de Banco\n2)Baja de Banco\n3)Modificacion de Banco\n4)Salir\n"
  93.        prompt += "Elija una opcion: "
  94.        opc = int(raw_input(prompt))
  95.        banks = Banks('maebancos.txt')
  96.        if opc == 1:
  97.            banks.add(input_code())
  98.        elif opc == 2:
  99.            banks.delete(input_code())
  100.        elif opc == 3:
  101.            banks.update(input_code())
  102.        elif opc == 4:
  103.            return
  104.  
  105. menu()
  106.  
  107.  



Hola, nos cuentas pocas cosas como para tener un conocimiento total del problema. Te indico cosas que veo:

Python es un lenguaje que permite programar de mil formas diferentes. El código que veo, me recuerda mucho a Java y la obsesión con hacer programación orientada a objetos pura, lo cual solo sirve para complicar el código y hacer los programas más grandes y aburridos.

Luego, veo que estás usando como estructura de datos para los bancos una lista: banks = [].
No se si conoces ya los diccionarios. Un diccionario permite almacenar datos mediante una clave, en vez de tenerlos todos en una lista "lineal".

El símbolo para declarar un diccionario vacío es: {}
Ejemplo:

self.banks = {}

De esta forma, como supongo que los "id" de los bancos serán únicos, puedes usar la propia "id" de un banco para obtenerlo, en vez de recorrer toda la lista hasta encontrarlo (método search).

Ejemplo:

def search(self, id):
  if id in self.banks:  return self.banks[id] # si existe lo devuelvo
  else: return None  # devuelvo None porque no existe


Te recomiendo que la función save, genere un archivo nuevo, borrando todo lo que hubiera con anterioridad. Es decir, volcando una copia de banks al archivo. Todo será mucho más simple.

No se si tienes restricciones a la hora de usar unas determinadas cosas, no se si te han dado ya un diseño de como tienes que hacerlo y te han quitado la libertad de hacerlo como tú quieras.

Dinos hasta dónde eres libre para hacerlo como tú quieres, y si tienes libertad entonces te haré un programa bien hecho, con la mitad de líneas o menos que funciona muy bien y es mucho más simple de entender y programar, que es la filosofía de python.
El diseño que tú has seguido es una Programación Orienta a Objetos clásica, muy noventera, pero estamos en 2015, eso ya no está de moda ;D



dejo el codigo en:
https://github.com/horaciobelardita/ejercicios_programacion_I/blob/master/Ejercicio30_31/file.py
otra cosa ahora tendría que agregarle la posibilidad de agregar cuentas asociada con un banco, es decir, un banco tiene muchas cuentas, en otro archivo con los campos id_cuenta, id_banco, descripción_cuenta. como me conviene hacerlo si bien ahora las cuentas tienen un id único, uso diccionario con clave la id de cuenta y valores una lista con id_banco y descripción o conviene con objeto? desde ya gracias por la ayuda

Mod: no hagas doble post
14  Programación / Scripting / [Python] ABM archivo de texto en: 4 Julio 2016, 01:51 am
Buenas gente, necesito ayuda con un ABM de un archivo de bancos donde el mismo viene cada registro por linea y cada campo separado por coma, con los campos id, descripcion y si existe para poder hacer la baja logica. No me esta sobreescribiendo en la baja el registro donde estaba, alguna ayuda o otra forma de hacerlo?

Código:
class Bank:

    def __init__(self, id, description='', exist=1, pos=0):
        self.id = id
        self.description = description
        self.exist = exist
        self.pos = pos

    def __repr__(self):
        return "{0:4.4},{1:30.30},{2:1.1}\n".format(str(self.id), self.description, str(self.exist))


class Banks:

    def __init__(self, filename):
        self.filename = filename
        self.load()

    def upload_in_memory(self, f):
        length = 0
        for line in f.readlines():
            record = line.split(',')
            bank = Bank(int(record[0].replace('\x00', '').strip()))
            bank.description = record[1].strip()
            bank.exist = int(record[2].strip())
            bank.pos = length
            length += len(line)
            self.banks.append(bank)

    def load(self):
        self.banks = []
        try:
            f = open(self.filename, 'r')
            self.upload_in_memory(f)
        except IOError:
            return

    def exists(self, id):
        for bank in self.banks:
            if bank.id == id and bank.exist == 1:
                return True
        return False

    def save(self, id, description, exist, pos=0):
        bank = Bank(id, description, exist)
        if pos == 0:
            length = len(str(bank))
            position = (id * length) - length
        else:
            position = pos
        with open('maebancos.txt', 'a') as f:
            f.seek(position, 0)
            f.write(str(bank))

    def add(self, id):
        if not self.exists(id):
            description = raw_input("Descripcion: ")
            self.save(id, description, 1)
            print "{0} dado de alta con exito!!!".format(description)
            Menu.pause()
        else:
            print "El Banco ya ha sido dado de alta!!"
            Menu.pause()

    def search(self, id):
        for bank in self.banks:
            if bank.id == id:
                return bank

    def delete(self, id):
        if self.exists(id):
            bank = self.search(id)
            print "Codigo de banco: {0}\nDescripcion: {1}".format(bank.id, bank.description)
            opc = raw_input("Baja (B) Cancelar (C)").upper()
            if opc == 'B':
                self.save(bank.id, bank.description, 0, bank.pos)
                print "{0} dado de baja con exito!!".format(bank.description)
                Menu.pause()
        else:
            print "El banco no existe!!"
            Menu.pause()

    def update(self, id):
        if self.exists(id):
            bank = self.search(id)
            print "Codigo de banco: {0}\nDescripcion: {1}".format(bank.id, bank.description)
            print "Anote el nuevo dato"
            description = raw_input("Descripcion: ")
            self.save(bank.id, description, 1, bank.pos)
            print "{0} modificado con exito!!!".format(bank.description)
            Menu.pause()
        else:
            print "El banco no existe!!"
            Menu.pause()



class Menu:

    @staticmethod
    def pause():
        raw_input("Oprima una tecla para continuar")

    @staticmethod
    def input_code():
        while True:
            try:
                bank_code = int(raw_input("Codigo Banco: "))
                return bank_code
            except ValueError:
                print "Presta atencion, solo digitos!!"

    @staticmethod
    def menu():
        while True:
            prompt = "1) Alta de Banco\n2)Baja de Banco\n3)Modificacion de Banco\n"
            prompt += "Elija una opcion: "
            opc = int(raw_input(prompt))
            banks = Banks('maebancos.txt')
            if opc == 1:
                banks.add(Menu.input_code())
            elif opc == 2:
                banks.delete(Menu.input_code())
            elif opc == 3:
                banks.update(Menu.input_code())
            else:
                return



Menu.menu()

desde ya gracias, aclaro no puede usar base de datos lo tengo que hacer en archivo plano
15  Programación / Programación General / Ayuda con Ejercicio en Pascal? en: 5 Octubre 2012, 14:02 pm
Hola alguien me podria dar una mano con la resolucion de este ejercicio o una idea mas o menos de como hacerlo?

Realizar un módulo que reciba dos vectores, A y B, de N elementos cada uno, ordenados en forma ascendente y con elementos comunes a ambos vectores. Generar un tercer vector C de M elementos ordenados con los elementos de los vectores A y B. El nuevo vector no debe tener elementos repetidos.
Por ejemplo: este caso sirve para armar una única lista con los alumnos de Licenciatura y de Analista que cursan Programacion I.

desde ya gracias
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines