Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - statham

#11
Buenas chicos estoy leyendo un gran documento donde debo sacar los nombres y calves (es un ejercicio, nada malo).

Lo que pasa que los nombres si los consigo sacar con regex e("\\b(name )([^ ]*)");
ya que vienen detras de un name, pero las calve no al estar entre parentesis

Si uso regex p("\\b(()([^ ]*)"); me salta error en la memoria

Ejemplo del documento:

name Turing
key (31)

ese 31 no consigo cogerlo.

Un saludo
#12
Programación C/C++ / Leer fichero .vhdl en c++
1 Febrero 2019, 12:39 PM
Buenas llevo un tiempo buscando alguna biblioteca o forma de parsear un fichero .vhdl en c++.
Por ejemplo si tengo este simple codigo

Library IEEE;
use IEEE.std_logic_1164.all;

entity EXAMPLE is
 port ( A : in std_logic_vector (31 downto 0);  
      B : in fixed_std (6 downto 0);
      C: in natural;
      D: out natural; );
end EXAMPLE;


me interesaria sacar el tipo de cada señal y su tamaño, por ejemplo A es un std_logic_vector y su tamaño es 32.
Estoy buscando alguna forma de hacerlo que no sea a "pelo" ya que creo que debe haber alguna, pero no la encuentra.

Alguno ha realizado algo similar o saben por donde van los tiros?

Tampoco es un casteo, unicamente quiero sacar esos 2 datos.

Un saludo.
#13
Programación C/C++ / Re: tinyXML c++
1 Febrero 2019, 11:27 AM
Cita de: EdePC en  1 Febrero 2019, 00:21 AM
Saludos,

- Si te fijas lo has estado haciendo bien, Sibling es Hermano o Campañero, pRoot no tiene ningún hermano o compañero, esto lo tienes que hacer sobre pBodys tal como lo vienes haciendo con pParm = pParms->FirstChildElement("Input");

- Usa: pBodys = pBodys->NextSiblingElement("Test");

- También corrige: (int)count->Attribute("cont") en tu FOR, esto devuelve un Puntero y lo que conviertes a INT es el Puntero, no el valor. Mejor usa: count->IntAttribute("cont") en su lugar:

Código (cpp) [Seleccionar]
#include <iostream>
#include "tinyxml2.cpp"
#include "tinyxml2.h"

using namespace std;
using namespace tinyxml2;

int main() {
  XMLDocument doc;
  doc.LoadFile("example.xml");
  XMLElement *pRoot, *pBodys, *pParms, *pParms2, *pProcess, *pApp, *pLineFormat, *pParm, *pParm2, *count;
  pRoot = doc.FirstChildElement("Tests");
  if (pRoot) {
    count = pRoot->FirstChildElement("count");
    cout << "cont = " << count->Attribute("cont") << endl;
    pBodys = pRoot->FirstChildElement("Test");

    for (int i = 0; i < count->IntAttribute("cont"); i++) {
      cout << "id = " << pBodys->Attribute("id") << endl;
      if (pBodys) {
        pParms = pBodys->FirstChildElement("Inputs");
        if (pParms) {
          pParm = pParms->FirstChildElement("Input");
          while (pParm) {
            cout << "port = " << pParm->Attribute("port") << " ";
            cout << "value = " << pParm->Attribute("value") << endl;
            pParm = pParm->NextSiblingElement("Input");
          }
        }
        pParms2 = pBodys->FirstChildElement("Outputs");
        if (pParms2) {
          pParm2 = pParms2->FirstChildElement("Output");
          while (pParm2) {
            cout << "port = " << pParm2->Attribute("port") << " ";
            cout << "value = " << pParm2->Attribute("value") << endl;
            pParm2 = pParm2->NextSiblingElement("Output");
          }
        }
      }
      pBodys = pBodys->NextSiblingElement("Test");
    }
  }

  return 0;
}


Código (xml) [Seleccionar]
<Tests>
  <count cont="2"></count>
  <Test id="test0">
    <Inputs>
      <Input port="A" value="1" />
      <Input port="B" value="4.56" />
      <Input port="C" value="7" />       
    </Inputs>
    <Outputs>
      <Output port="D" value="10" />     
    </Outputs>
  </Test>
  <Test id="test1">
    <Inputs>
      <Input port="K" value="3" />
      <Input port="L" value="9.56" />
    </Inputs>
    <Outputs>
      <Output port="P" value="6" />       
    </Outputs>
  </Test>
</Tests>


Código (dos) [Seleccionar]
C:\Users\EdSon\Desktop>g++ xmlreader.cpp -o xmlreader.exe && xmlreader.exe
cont = 2
id = test0
port = A value = 1
port = B value = 4.56
port = C value = 7
port = D value = 10
id = test1
port = K value = 3
port = L value = 9.56
port = P value = 6

C:\Users\EdSon\Desktop>


- Documentación TinyXML-2: http://leethomason.github.io/tinyxml2/classtinyxml2_1_1_x_m_l_element.html

muchisimas gracias me sirivio!!
Un saludo.
#14
Cita de: EdePC en  1 Febrero 2019, 03:17 AM
Saludos,

- Yo suelo solicitar al usuario el tamaño del array y crearlo en vivo:

#include <stdio.h>

int main() {
  int cantidad;
  printf("Indique la cantidad de elementos del Array: ");
  scanf("%d", &cantidad);
  int array[cantidad];
  for (int i = 0; i < cantidad; i++) {
    array[i] = i;
  }
  for (int i = 0; i < cantidad; i++) {
    printf("%d\n", array[i]);
  }
  return 0;
}


- Sin embargo he estado leyendo varios libros de programación en C y veo que casi ninguno habla de lo que hago. Es bastante sencillo utilizar el método que expongo, pero por lo que he leído, esto no es Estándar y muchos compiladores darán error.

-- Yo uso MinGW (gcc, g++, 6.3.0) y nunca me ha dado problemas al respecto así que ni enterado.

- La mayoría de los libros solo hablan de Arrays estáticos (int array[5], #define SIZE 5; int array[SIZE], int array[] = {1, 2, 3, 4, 5}), luego pasan directamente a Arrays dinámicos con punteros y malloc, free y NULL.

- Recomiendo este libro gratuito en español que justo trato el tema: Vectores Estáticos (pág. 63), Memoria Dinámica (pág. 213):
https://openlibra.com/es/book/introduccion-a-la-programacion-con-c-3

-- Y este par más que son bastante prácticos con varios ejemplos con malloc y free:
https://openlibra.com/es/book/fundamentos-de-programacion-en-c
https://openlibra.com/es/book/apuntes-de-la-materia-de-programacion-basica

Buenas gracias por responder, en mi caso no podria meterlo por teclado o pedirselo al usuario, ya que el tamaño viene indicado en un fichero por tanto hay que leerlo.

voy a intentar hacerlo con un array dinamico con puntero, o como solucion al sucia pero valida  leere el tamaño del array en el main, creo el array y luego llamare a la funcion pasandole el descriptor del fichero junto con el array.

un saludo.
#15
ejercicio sencillo, con un struct por cada cliente, y el resto son operaciones.

si tienes alguna duda especifica comentanos
#16
Buenas, es posible que llamando a una función desde el main(por ejemplo u otra) te devuelva un array??

Se que es posible, ya que tu al llamar a la funcion le pasas el array y te rellena los datos.

La cosa viene cuando el tamaño de dicho array no lo sabes hasta que llamas a esa función , entonces como puedes pasarle un array sin saber su tamaño? tampoco podrías igualar dicho array al array que te devuelve la función por que no sabes el tamaño.


Como podria crear un array vacio o un array de tamaño dinamico?


Un saludo.
#17
Programación C/C++ / tinyXML c++
31 Enero 2019, 12:40 PM
Quiero leer un archivo xml donde se encuentran varias pruebas, pero siempre obtengo la primera y no sale del bucle. Si hago una iteración bien, pero cuando hago el bucle, no puedo pasar a la siguiente prueba.

Y si uso // pBodys = pRoot-> NextSiblingElement ("Test"); saltA un error en la iteración 2, (https://i.gyazo.com/9a108bf422299b66abfe91127668a63c.png) si no lo uso, permanece en un bucle infinito

(https://i.gyazo.com/133be25514a8a000fce87e2fc7cc52ad.png)

No puedo seguir adelante.  un saludo

    int main()
    {
        XMLDocument doc;
        doc.LoadFile("example.xml");
        XMLElement *pRoot, *pBodys, *pParms, *pParms2, *pProcess, *pApp, *pLineFormat, *pParm, *pParm2, *count;
        pRoot = doc.FirstChildElement("Tests");
        if (pRoot)
        {
            count = pRoot->FirstChildElement("count");
            std::cout << "cont=" << count->Attribute("cont") << std::endl;
            pBodys = pRoot->FirstChildElement("Test");
            //for (int i = 0; i < (int)count->Attribute("cont"); i++) {


            std::cout << "id=" << pBodys->Attribute("id") << std::endl;
            if (pBodys) {
                pParms = pBodys->FirstChildElement("Inputs");
                if (pParms)
                {
                    pParm = pParms->FirstChildElement("Input");
                    while (pParm) {

                        std::cout << "port=" << pParm->Attribute("port") << " ";
                        std::cout << "value=" << pParm->Attribute("value") << std::endl;


                        pParm = pParm->NextSiblingElement("Input");
                    }
                }
                pParms2 = pBodys->FirstChildElement("Outputs");
                if (pParms2)
                {
                    pParm2 = pParms2->FirstChildElement("Output");
                    while (pParm2) {

                        std::cout << "port=" << pParm2->Attribute("port") << " ";
                        std::cout << "value=" << pParm2->Attribute("value") << std::endl;


                        pParm2 = pParm2->NextSiblingElement("Output");
                    }
                }



            }

            //pBodys = pRoot->NextSiblingElement("Test");
        //}
    }

    return 0;
}

DOC example.xml
<Tests>
    <count cont="2"></count>
    <Test id="test0">
        <Inputs>
            <Input port="A" value="1" />
            <Input port="B" value="4.56" />
            <Input port="C" value="7" />       
        </Inputs>
        <Outputs>
            <Output port="D" value="10" />     
        </Outputs>
    </Test>

    <Test id="test1">
        <Inputs>
            <Input port="K" value="3" />
            <Input port="L" value="9.56" />
        </Inputs>
        <Outputs>
            <Output port="P" value="6" />       
        </Outputs>
    </Test>
</Tests>
#18
Claro al pincipio leia el fichero y cada vez que detectava una variable global T que era <Test> pues identificaba el primer test, y asi con todas las etiquetas.
Pero queda muy feo, y debo usar una libreria que parsee xml detectando automaticamente la etiquetas, ya que este trabajo tengo q entregarlo y exponerlo

estoy intentandolo con tinyxml2 que es lo mas sencillo que he visto

Para leer algo asi, y guardar cada dato en una variable

<Tests>
   <Test id="test0">
      <Inputs>
         <Input port="A" value="1" />
         <Input port="B" value="4.56" />
         <Input port="C" value="7" />      
      </Inputs>
      <Outputs>
         <Output port="D" value="10" />      
      </Outputs>
   </Test>
#19
Buenas a todos, recurro a este foro ya que llevo unos dias en los cuales no consigo leer un archivo xml desde un proyecto c++.

He intentado con MSXML pero el me coge bien el archivo **msxmlX.dll** (o quiero pensar eso), tambien he probado con TinyXML y nada.

Con Poco y pugiXML no encuentro mucha documentacion...

Estoy ahora con QtXML, que parece sencillo pero no usa Visual Studio.

Es basicamente leer un fichero xml y guardar variables.

Sabeis de algun videotutorial o web sencilla de seguir??

Un saludo.