[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-----