Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2023
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
¿Cuál es el mejor archivo para guardar y recuperar datos?

Hola:

Antes usaba muchos el XML para guardar y leer datos que tenía en el formulario. Por ejemplo en este caso.



Código:
using System;
using System.Windows.Forms;
using System.Xml;

namespace Guardar_y_cargar_datos_en_archivo_xml
{
 * *public partial class Form1 : Form
 * *{
 * * * *public Form1()
 * * * *{
 * * * * * *InitializeComponent();
 * * * *}

 * * * *// Guarda los datos introducidos a parte de crear el archivo "miXML.xml".
 * * * *private void button_Guardar_Click(object sender, EventArgs e)
 * * * *{
 * * * * * *XmlWriter w = XmlWriter.Create("miXML.xml");
 * * * * * *w.WriteStartElement("MiInfo");
 * * * * * *w.WriteElementString("TextBox", textBox1.Text);
 * * * * * *w.WriteElementString("CheckBox", checkBox1.Checked.ToString());
 * * * * * *w.WriteElementString("radioButton1", radioButton1.Checked.ToString());
 * * * * * *w.WriteElementString("radioButton2", radioButton2.Checked.ToString());
 * * * * * *w.WriteEndElement();
 * * * * * *w.Close();
 * * * *}

 * * * *private void Form1_Load(object sender, EventArgs e)
 * * * *{
 * * * * * *try
 * * * * * *{
 * * * * * * * *XmlReader r = XmlReader.Create("miXML.xml");
 * * * * * * * *r.ReadStartElement("MiInfo");
 * * * * * * * *textBox1.Text = r.ReadElementContentAsString();
 * * * * * * * *checkBox1.Checked = Convert.ToBoolean(r.ReadElementContentAsString());
 * * * * * * * *radioButton1.Checked = Convert.ToBoolean(r.ReadElementContentAsString());
 * * * * * * * *radioButton2.Checked = Convert.ToBoolean(r.ReadElementContentAsString());
 * * * * * * * *r.ReadEndElement();
 * * * * * * * *r.Close();
 * * * * * *}
 * * * * * *catch (Exception)
 * * * * * *{

 * * * * * * * *//
 * * * * * *}

 * * * *}
 * *}
}
El archivo se genera en el disco duro o SSD hoy en día y pone esto.

Código:
<MiInfo>
<TextBox>Texto y textos</TextBox>
<CheckBox>True</CheckBox>
<radioButton1>False</radioButton1>
<radioButton2>True</radioButton2>
</MiInfo>
Me funciona de maravilla para lo que es el XML y me lo recomendaron en este foro hace años, desde el 2.008.

Ahora, veo mucho con el santo JSON.

¿Es recomendable usar el JSON?

Si es cierto o no. Quiero hacer el mismo ejemplo de recuperar y guardar datos como se hizo el XML.

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.

Última edición por Neftali [Germán.Estévez] fecha: 13-02-2023 a las 09:57:53. Razón: Corregir link a la imagen
Responder Con Cita
  #2  
Antiguo 11-02-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El "mejor" formato depende de los requisitos y todo eso. Si no hay un problema con tu uso de XML, no veo el porque cambiar por cambiar.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 12-02-2023
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Más que cambiar quier probar cosas que nunca he probado como el json, también porque cada vez más lo usan más y más, a parte de eso, parece más fácil de leer por el humano que muchas etiquetas que tiene el XML a lo HTML, tiene menos peso entre otras ventajas.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #4  
Antiguo 12-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Prefiero el .ini de toda la vida, es más simple
Responder Con Cita
  #5  
Antiguo 12-02-2023
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Precisamente usaba *.ini y me comentaron ya por el 2.000 que es muy lento, intento con .reg y me dice que te relantiza Windows con el tiempo, mejor nunca tocar el editor de registro, al final me enseñaron XML y mal hecho, a lo antigua, ahora se hace con clases. Hoy en día por su versatilidad el json.

¿Qué entiende más el humano?
XML
Código:
    <?xml version="1.0" encoding="utf-8"?>
    <MiInfo>
         <TextBox>Hola.</TextBox>
         <CheckBox>True</CheckBox>
         <radioButton1_Luz_ON>False</radioButton1_Luz_ON>
         <radioButton2_Luz_OFF>True</radioButton2_Luz_OFF>
    </MiInfo>
Json
Código:
    {
         "MiInfo": 
                 {
                     "TextBox": "Hola.",
                     "CheckBox": "True",
                     "radioButton1_Luz_ON": "False",
                     "radioButton2_Luz_OFF": "True"
                 }
    }
Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #6  
Antiguo 12-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Todo depende de para lo que se use exactamente.
Mucho más simple, claro... y rápido así:
Código:
TextBox: Hola.
CheckBox: True
radioButton1_Luz_ON: False
radioButton2_Luz_OFF: True
Responder Con Cita
  #7  
Antiguo 12-02-2023
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Concuerdo con legibilidad y simpleza de Jsom vs XML

Y si bien sigo usando .ini por su minimalismo y eficacia. No me atrevería a usarlo para decenas de datos.
Responder Con Cita
  #8  
Antiguo 13-02-2023
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Estoy con Mario. Depende del uso que se le quiera dar. Hay datos, por ejemplo, que pueden guardarse en XML (usando "CDATA") que no sería posible o sería muy complicado guardar en archivos JSON, por ejemplo. De modo que depende del uso que se le vaya a dar al archivo y a los datos que se necesita guardar en el mismo. Si son datos verdaderamente simples acaso el venerable INI, o acaso JSON, en lugar de XML, pero, lo cierto es que cada archivo tiene sus más y su menos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 13-02-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Al final todos los tipos de los que estamos hablando son ficheros de texto, por lo tanto son muy similares.
A mi me siguen gustando, por simplicidad y por legibilidad, los .INI

Para los otros, XML y JSON, lo primero que tengo que hacer al abrirlos con un editor (Notepad++) es formatearlos, cosa que me ha mucha rabia/madra.
Si se necesita más complejidad (por ejemplo anidamiento) ya si que es necesario ir a XML/JSON.

Y entre estos 2 pues casi mejor (en mi caso) JSON, por legibilidad también, y porque puedes usar clases nativas; Los XMLDoc, Xml.XMLIntf, XMLDom, me resultan incómodos.

Por otro lado, yo he usado a veces esto, que resulta muy útil y cómodo (siempre y cuando la estructura del JSON no cambie):
https://jsontodelphi.com/
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 15-02-2023
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Yo suelo usar IFF. De hecho hace poco subí mis clases a SourceForge con el nombre de iff4pascal. Si no lo había dicho es porque estaba pensando en si añadir soporte a RIFF, pero tampoco veo el porqué... Bueno, eso y que todavía no lo he probado con Delphi, aunque no debería dar muchos problemas.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #11  
Antiguo 19-02-2023
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Lo he logrado con el Newtonjson, en el cual es una librería externa.

El resultado me queda en una sola línea y no me gusta. Por ejemplo.
Código:
{"TextBox":"Hola Club Delphi","CheckBox":true,"RadioButton1_Luz_ON":true,"RadioButton2_Luz_OFF":false}
Cuando en realidad debe quedar así para su fácil entendimiento o de forma legible.
Código:
{
     "TextBox":"Hola Club Delphi",
     "CheckBox":true,
     "RadioButton1_Luz_ON":true,
     "RadioButton2_Luz_OFF":false
}
Al menos ya puedo guardar y leer el json de una vez por todas. Ya averiguaré el formato de guardado como dije arriba.

Lo que estoy intentado, es evitar librerías de terceros como el Newtonjson, lo que no sabía que está el System.Text.json de la propia .net 7.0, que en realidad es nuevo en el core ya que el .net 4.8 hacia atrás no lo incluye.

Dejo aquí el código por si alguien lo necesita o por curiosear hecho con el Newtonjson.
Código:
using Newtonsoft.Json;

namespace Guardar_y_cargar_datos_en_archivo.json_.NET_7._0
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        class MiInfo
        {
            public string? TextBox { get; set; }
            public bool CheckBox { get; set; }
            public bool RadioButton1_Luz_ON { get; set; }
            public bool RadioButton2_Luz_OFF { get; set; }
        }

        void SalvarDatos()
        {
            MiInfo miInfo = new()
            {
                TextBox = textBox1.Text,
                CheckBox = checkBox1.Checked,
                RadioButton1_Luz_ON = radioButton1.Checked,
                RadioButton2_Luz_OFF = radioButton2.Checked
            };

            try
            {
                string serializado = JsonConvert.SerializeObject(miInfo);
                File.WriteAllText(@"Ejemplo.json", serializado);
            }
            catch {}
        }

        void RecuperarDatos()
        {
            if (File.Exists(@"Ejemplo.json"))
            {
                string serializado = File.ReadAllText(@"Ejemplo.json");
                //MiInfo miInfo = (MiInfo)JsonConvert.DeserializeObject(serializado);
                MiInfo miInfo = JsonConvert.DeserializeObject<MiInfo>(serializado);
                if (miInfo != null)
                {
                    textBox1.Text = miInfo.TextBox;
                    checkBox1.Checked = miInfo.CheckBox;
                    radioButton1.Checked = miInfo.RadioButton1_Luz_ON;
                    radioButton2.Checked = miInfo.RadioButton2_Luz_OFF;
                }
            }
        }

        private void button_Guardar_Click(object sender, EventArgs e)
        {
            SalvarDatos();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            RecuperarDatos();
        }
    }
}
Como podrán ver, he intentado usarlo con la librería de la propia Visual Studio Community 2022 usando .NET 7.0 y no es compatible.

¿Alguna idea sobre cómo adaptar de Newtosjon al de Microsoft que viene de serie?

En cuanto a los ini, los abandoné desde hace años cuando me dijeron que es muy viejo y lento, tampoco use el editor de registro para guardar datos y leerlos, ya que esta el Windows cada vez sería más lento, que suse XML y lo he usado hasta a día de hoy y ahora quiero ver el json por lo que veo, antes lo ignoraba y parece mejor que el xml y depende para qué, al menos para leer y entender de entrada, parece el más recomendable, por se usa cada vez más y más.

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
  #12  
Antiguo 19-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por REHome Ver Mensaje
En cuanto a los ini, los abandoné desde hace años cuando me dijeron que es muy viejo y lento
Eso son prejucios de quien te lo dijo. ¿Acaso no es lo mismo que dicen de Delphi, que es viejo?

Si todo lo que vas a almacenar es algo así:
Cita:
TextBox=Hola Club Delphi
CheckBox=true
RadioButton1_Luz_ON=true
RadioButton2_Luz_OFF=false
Es lo más simple, directo, claro y cómodo de usar, te sirve cualquier editor.

Ahora, si vas a almacenar "registros" en ese fichero de texto, eso ya sería distinto.
Responder Con Cita
  #13  
Antiguo 19-02-2023
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Se ve muy bien el ini, lo recuerdo bien y lo usaba mucho el Officce 1997. Los de ahora no lo he mirado y mira que ha llovido desde entonces.

No recordaba que el más rápido y también me aconsejaron, es usar el binario.
https://learn.microsoft.com/es-es/do...e?view=net-7.0

Como no lo lee en el block de notas, por muy rápido que sea, lo descarté.

Y mira que Delphi, lo tengo todavía pendiente para hacer cosas relacionados con Arduino, ejemplos, pequeños tutoriales. Hace años hice un tutorial sencillo, así que Delphi no quede en el olvido, ya que Java por medio, que si Python, que si el Visual Studio y no se qué, pascal en general solo lo apoya Delphi.



Gracias.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.

Última edición por REHome fecha: 19-02-2023 a las 20:26:13.
Responder Con Cita
  #14  
Antiguo 19-02-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Varias veces hablas de algo "rápido" pero lo que muestras no veo algo que lo demande. Si no hablamos de varias megas/gigas no va a ver enorme diferencia entre los formatos.

Creo que si no tienes claro el porque estas buscando un formato ninguno va a resaltar.


P.D: La version moderna de los INI es el TOML https://toml.io/en/
__________________
El malabarista.
Responder Con Cita
  #15  
Antiguo 20-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
P.D: La version moderna de los INI es el TOML https://toml.io/en/
TOML [Tom's Obvious Minimal Language]
Viendo el ejemplo de su web, está claro que es un nombre muy apropiado.
¿Sabes si hay algo implementado en Delphi para usarlos?
Responder Con Cita
  #16  
Antiguo 20-02-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Parece que para FPC:

https://github.com/toml-lang/toml/wiki

https://github.com/genericptr/fpTOML
__________________
El malabarista.
Responder Con Cita
  #17  
Antiguo 21-02-2023
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Esto de TOML está chulo.

Ahora recuerdo que hace años creé un sistema propio y gerárquico y llegué a usarlo en programas para clientes. No voy a entrar en detalles porque lo tengo borroso, pero quizá deba darle una vuelta y re-inventarlo a partir de lo que recuerdo...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #18  
Antiguo 21-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Esto de TOML está chulo.
Muy chulo, muy completo, con esas listas y demás queda muy completo.
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Ahora recuerdo que hace años creé un sistema propio y gerárquico y llegué a usarlo en programas para clientes. No voy a entrar en detalles porque lo tengo borroso, pero quizá deba darle una vuelta y re-inventarlo a partir de lo que recuerdo...
Responder Con Cita
  #19  
Antiguo 28-02-2023
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Teniendo este código que por fin ya funciona, lo de guardar y leer controles como configuración de formulario Windows.

Uso el .NET 7.0 y tiene su propia librería. Mi idea es no usar librerías externas como Newtonjson, si no el que incluye el propio .NET.

La librería oficial de Visual Studio viene aquí.

Dejo el código aquí abajo hecho con Newtonjson.
Código:
using Newtonsoft.Json;

namespace Guardar_y_cargar_datos_en_archivo.json_.NET_7._0
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        class MiInfo
        {
            public string? TextBox { get; set; }
            public bool CheckBox { get; set; }
            public bool RadioButton1_Luz_ON { get; set; }
            public bool RadioButton2_Luz_OFF { get; set; }
        }

        void SalvarDatos()
        {
            MiInfo miInfo = new()
            {
                TextBox = textBox1.Text,
                CheckBox = checkBox1.Checked,
                RadioButton1_Luz_ON = radioButton1.Checked,
                RadioButton2_Luz_OFF = radioButton2.Checked
            };

            try
            {
                string serializado = JsonConvert.SerializeObject(miInfo);
                File.WriteAllText(@"Ejemplo.json", serializado);
            }
            catch {}
        }

        void RecuperarDatos()
        {
            if (File.Exists(@"Ejemplo.json"))
            {
                string serializado = File.ReadAllText(@"Ejemplo.json");
                //MiInfo miInfo = (MiInfo)JsonConvert.DeserializeObject(serializado);
                MiInfo miInfo = JsonConvert.DeserializeObject<MiInfo>(serializado);
                if (miInfo != null)
                {
                    textBox1.Text = miInfo.TextBox;
                    checkBox1.Checked = miInfo.CheckBox;
                    radioButton1.Checked = miInfo.RadioButton1_Luz_ON;
                    radioButton2.Checked = miInfo.RadioButton2_Luz_OFF;
                }
            }
        }

        private void button_Guardar_Click(object sender, EventArgs e)
        {
            SalvarDatos();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            RecuperarDatos();
        }
    }
}
Ahora toca hacer lo que se tenga que hacer con la librería que incluye el .net.

¿Alguna idea?

Lo pregunto porque veo que no es para nada compatible entre Newtonjson con el json .net de Microsoft.


https://learn.microsoft.com/es-es/do...r?view=net-7.0

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cuál es el mejor servicio para guardar archivos en la nube? Lucuitas Internet 13 25-04-2019 20:10:29
Cual es la mejor opción de conexión a Bases de Datos en Lazarus para ... ? rolandoj Lazarus, FreePascal, Kylix, etc. 20 24-09-2012 01:44:57
¿Cuál es la mejor base de datos del mercado? rrf Varios 3 06-07-2010 18:12:12
Cual seria el mejor lugar para guardar la contraseña de acceso a mi Aplicacion JoAnCa Varios 3 21-02-2009 21:42:36
Cual es el mejor manejador gratis de base de datos para MySQl 5.0+ ? juangabriel1786 SQL 3 15-12-2008 00:10:29


La franja horaria es GMT +2. Ahora son las 08:06:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi