diff options
| -rw-r--r-- | csv/csv.cpp | 156 | 
1 files changed, 78 insertions, 78 deletions
| diff --git a/csv/csv.cpp b/csv/csv.cpp index c1971256..3d509a91 100644 --- a/csv/csv.cpp +++ b/csv/csv.cpp @@ -16,95 +16,95 @@  CSV::CSV(QIODevice * device)  { -	m_device = device; -	m_codec = QTextCodec::codecForLocale(); -	m_pos = 0; -	m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n"); +    m_device = device; +    m_codec = QTextCodec::codecForLocale(); +    m_pos = 0; +    m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n");  } -CSV::CSV(QString &string){	 -	m_device = NULL; -	m_codec = QTextCodec::codecForLocale(); -	m_string = string;	 -	m_pos = 0; -	m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n"); +CSV::CSV(QString &string){ +    m_device = NULL; +    m_codec = QTextCodec::codecForLocale(); +    m_string = string; +    m_pos = 0; +    m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n");  }  void CSV::setCodec(const char* codecName){ -	m_codec = QTextCodec::codecForName(codecName); +    m_codec = QTextCodec::codecForName(codecName);  }  QString CSV::readLine(){ -	QString line; +    QString line; + +    if(m_string.isNull()){ +        if(m_device && m_device->isReadable()){ +            QTextDecoder dec(m_codec); +            m_string = dec.toUnicode(m_device->readAll()); +        }else{ +            return QString(); +        } +    } +    if((m_pos = m_rx.indexIn(m_string,m_pos)) != -1) { +        line = m_rx.cap(1); +        m_pos += m_rx.matchedLength(); +    } +    return line; -	if(m_string.isNull()){ -		if(m_device && m_device->isReadable()){ -			QTextDecoder dec(m_codec); -			m_string = dec.toUnicode(m_device->readAll()); -		}else{ -			return QString(); -		} -	} -	if((m_pos = m_rx.indexIn(m_string,m_pos)) != -1) { -		line = m_rx.cap(1);		 -		m_pos += m_rx.matchedLength(); -	} -	return line; -	  }  QStringList CSV::parseLine(){ -	return parseLine(readLine()); +    return parseLine(readLine());  }  QStringList CSV::parseLine(QString line){ -	QStringList list; -	int pos2 = 0; -	QRegExp rx2("(?:\"([^\"]*)\";?)|(?:([^;]*);?)"); -	if(line.size()<1){ -		list << "";		 -	}else while (line.size()>pos2 && (pos2 = rx2.indexIn(line, pos2)) != -1) { -		QString col; -		if(rx2.cap(1).size()>0) -			col = rx2.cap(1); -		else if(rx2.cap(2).size()>0) -			col = rx2.cap(2); -		 -		list << col;			 +    QStringList list; +    int pos2 = 0; +    QRegExp rx2("(?:\"([^\"]*)\";?)|(?:([^;]*);?)"); +    if(line.size()<1){ +        list << ""; +    }else while (line.size()>pos2 && (pos2 = rx2.indexIn(line, pos2)) != -1) { +        QString col; +        if(rx2.cap(1).size()>0) +            col = rx2.cap(1); +        else if(rx2.cap(2).size()>0) +            col = rx2.cap(2); + +        list << col; -		if(col.size()) -			pos2 += rx2.matchedLength(); -		else -			pos2++; -	} -	return list; +        if(col.size()) +            pos2 += rx2.matchedLength(); +        else +            pos2++; +    } +    return list;  }  bool CSV::getGameData( const int id, unsigned char* table, QString& gamename)  {      QString gameID = QString::number(id); -     +      /* zero table first, in case unknown game is connecting */      for (int i = 0; i < 8; i++)          table[i] = 0;      QStringList gameLine; -	qDebug() << "getGameData, ID = " << gameID; +    qDebug() << "getGameData, ID = " << gameID; -	QFile file(QCoreApplication::applicationDirPath() + "/settings/facetracknoir supported games.csv"); -	if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ +    QFile file(QCoreApplication::applicationDirPath() + "/settings/facetracknoir supported games.csv"); +    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){          return false; -	} -	CSV csv(&file); +    } +    CSV csv(&file);      while (gameLine = csv.parseLine(), gameLine.count() > 2) { -		//qDebug() << "Column 0: " << gameLine.at(0);		// No. -		//qDebug() << "Column 1: " << gameLine.at(1);		// Game Name -		//qDebug() << "Column 2: " << gameLine.at(2);		// Game Protocol -		//qDebug() << "Column 3: " << gameLine.at(3);		// Supported since version -		//qDebug() << "Column 4: " << gameLine.at(4);		// Verified -		//qDebug() << "Column 5: " << gameLine.at(5);		// By -		//qDebug() << "Column 6: " << gameLine.at(6);		// International ID -		//qDebug() << "Column 7: " << gameLine.at(7);		// FaceTrackNoIR ID -		 -		if (gameLine.count() > 6) { -			if (gameLine.at(6).compare( gameID, Qt::CaseInsensitive ) == 0) { +        //qDebug() << "Column 0: " << gameLine.at(0);		// No. +        //qDebug() << "Column 1: " << gameLine.at(1);		// Game Name +        //qDebug() << "Column 2: " << gameLine.at(2);		// Game Protocol +        //qDebug() << "Column 3: " << gameLine.at(3);		// Supported since version +        //qDebug() << "Column 4: " << gameLine.at(4);		// Verified +        //qDebug() << "Column 5: " << gameLine.at(5);		// By +        //qDebug() << "Column 6: " << gameLine.at(6);		// International ID +        //qDebug() << "Column 7: " << gameLine.at(7);		// FaceTrackNoIR ID + +        if (gameLine.count() > 6) { +            if (gameLine.at(6).compare( gameID, Qt::CaseInsensitive ) == 0) {                  QByteArray id = gameLine.at(7).toLatin1();                  unsigned int tmp[8];                  unsigned int fuzz[3]; @@ -115,18 +115,18 @@ bool CSV::getGameData( const int id, unsigned char* table, QString& gamename)                      ret = false;                  }                  else if (sscanf(id.constData(), -                           "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", -                           fuzz + 2, -                           fuzz + 0, -                           tmp + 3, -                           tmp + 2, -                           tmp + 1, -                           tmp + 0, -                           tmp + 7, -                           tmp + 6, -                           tmp + 5, -                           tmp + 4, -                           fuzz + 1) != 11) +                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", +                                fuzz + 2, +                                fuzz + 0, +                                tmp + 3, +                                tmp + 2, +                                tmp + 1, +                                tmp + 0, +                                tmp + 7, +                                tmp + 6, +                                tmp + 5, +                                tmp + 4, +                                fuzz + 1) != 11)                  {                      qDebug() << "scanf failed" << fuzz[0] << fuzz[1] << fuzz[2];                      ret = false; @@ -141,9 +141,9 @@ bool CSV::getGameData( const int id, unsigned char* table, QString& gamename)                  gamename = gameLine.at(1);                  file.close();                  return ret; -			} -		} -	} +            } +        } +    }      qDebug() << "Unknown game connected" << gameID;      file.close(); | 
