[Kde-devel-es] Haciendo un "switch" con un QString

Jaime Robles kde-devel-es@mail.kde.org
Tue, 21 Jan 2003 19:09:04 +0100


=2D----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Buenas tardes a todos.
A ver si alguien me puede decir como puedo hacer un "switch" con un QString=
=2E..
Estoy leyendo un fichero que contiene datos del estilo a:
<fichero de datos>
ADIF Export from Klog
http://klog.berlios.de
<EOH>

<CALL:5>EA4TV <QSO_DATE:8>20030121 <TIME_ON:4>1153 <MODE:2>CW <BAND:3>80m=20
<RST_SENT:3>599 <RST_RCVD:3>599 <TX_
POWER:2>90 <QSL_RCVD:1>N <QSL_SENT:1>N <COMMENT:0><EOR>

<CALL:5>EA7CD <QSO_DATE:8>20030121 <TIME_ON:4>1153 <MODE:3>SBB <BAND:3>10m=
=20
<RST_SENT:3>599 <RST_RCVD:3>599 <TX
_POWER:2>89 <QSL_RCVD:1>N <QSL_SENT:1>N <COMMENT:0><EOR>
<fichero de datos>

Y con el codigo que tengo debajo encuentro los "tags" que se marcan con=20
<NOMBRE_DEL_TAG:Longitud_del_Dato>DATO=20

Al final de un registro se encuentra un <EOR> que marca el final de ese=20
registro y comienzo del siguiente (o no).

Os he puesto un ejemplo de un fichero de datos que quiero analizar.

Ahora la pregunta... En funci=F3n de cada etiqueta es un dato... =BFComo ha=
go el=20
switch??? porque creo solo se pueden meter enteros... :-?

A lo mejor hay alguna otra forma... pero no se como sin hacer uso intensivo=
 de=20
"if" que creo que no es la solucion.

Gracias!

El codigo que tengo es este:

void Klog::adifReadLog(){
//  QStringList lines;
//  QString aux;
  QFile file( "logadif.adi" );
  if ( file.open( IO_ReadOnly ) ) {
    QTextStream stream( &file );
    QString line;
    QString adifTab;
    QString theData;
    int len; // for the tab length
    QString data =3D "";
    int aux =3D 0;
    while ( !stream.eof()  && (aux =3D=3D 0)) {
      data =3D stream.readLine();
      if (data.upper().contains("<EOH>") !=3D 0)
        aux =3D 1;
    }
    data =3D ""; //
    while (!stream.eof()){
      data =3D stream.readLine();
      if(!data.isEmpty()){
        data =3D data.simplifyWhiteSpace().upper();
        aux =3D data.contains('<');
        cout << "\nAux: " << aux << endl;

        QStringList fields =3D QStringList::split('<', data );
       =20
        for (int a =3D 0; a < aux-1; a++){
          if (fields[a].contains("<EOR>") =3D=3D 0){
            adifTab =3D fields[a].section(':',0,0);
            len =3D (fields[a].section(':',1)).section('>',0,0).toInt();
            theData =3D ((fields[a].section(':',1)).section('>',1));
            theData.truncate(len);
            switch (adifTab){
              case "CALL":
                qso.setQrz(theData);
              break;
              case "QSO_DATE":
              break;
              case "TIME_ON":
              break;
              case "RST_RCVD":
                qso.setRstrx(theData.toInt());
              break;
              case "RST_SENT":
              break;
              case "BAND":
              break;
              case "MODE":
              break;
              case "TX_PWR":
              break;
              case "QSLSDATE":
              break;
              case "QSLRDATE":
              break;
              case "QSL_RCVD":
              break;
              case "QSL_SENT":
              break;
              case "QSL_VIA":
              break;
              case "ADDRESS":
              break;
              case "GRIDSQUARE":
              break;
              case "IOTA":
              break;
              case "OPERATOR":
              break;
              case "STATE":
              break;
              case "NAME":
              break;
              case "QTH":
              break;
              case "RX_PWR":
              break;
              case "STX":
              break;
              case "STX":
              break;
              default:
              break;                       =20
            }
           =20
          }else{

           // The tab is <EOR>=20
          }
//data.section( "**", 2, 2 ); // s =3D=3D "surname"

         =20
        }
      //Klog::qrz =3D fields[2]          =20

        Klog::number++;
      }
    }
    file.close();
  }

}
=2D --=20
Un saludo,
	Jaime Robles
	jaime@kde.org
	Coordinador KDE-es - KDE Spanish Translation Team
	http://www.kde.org/es  - http://es.i18n.kde.org
=2D----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+LYzBER46oL+8yYURAjgHAJ4mJf7ZvfNMxvEtfjZIg7byBjHAsgCffTq3
NvPAxtpSdZS9EG2blXbmDVE=3D
=3D986L
=2D----END PGP SIGNATURE-----