gpt4 book ai didi

c++ - qstring 到 qchar 特殊字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:42 25 4
gpt4 key购买 nike

我正在研究解析器。我想逐个字符地解析文本文件。

bool parse(QString fileName,
QString fieldTerminator,
QString lineTerminator,
QString encloseChar)
{
QChar ft = *(fieldTerminator.unicode());
QChar lt = *(lineTerminator.unicode());
QChar ec = *(encloseChar.unicode());

QFile file(fileName);

if(!file.open(QIODevice::ReadOnly))
{
qDebug() << file.errorString();
return false;
}

QTextStream inStream(&file);

while(!inStream.atEnd())
{
QChar c;
inStream >> c;

if(c == ft)
qDebug() << "fieldterm";
else if(c == lt)
qDebug() << "lineterm";
else if(c == ec)
qDebug() << "encloseChar";
}

return true;
}

我在将 fieldTerminator 等转换为特殊字符 (QChar::SpecialCharacter) 时遇到问题。

例如:如果我将 fieldTerminator = "\n" 传递给函数,ft = '\' (92)

有没有简单的方法来归档它?谢谢。

最佳答案

解析文本很快就变成了有状态的事情。如果要将两个字符序列 \ n 识别为换行符 \n,则比较单个字符 (c = = ft) 是不够的。您可以记住前一个字符并检查当前和前一个字符。

QString parse(QString const& text)
{
static QChar BACKSLASH('\\');
static QByteArray const SPECIAL_CHARS ("\"'?abfnrtv");
static QString const SPECIAL_QCHARS ("\\\"\'\?\a\b\f\n\r\t\v") ;

QString result;
QChar prev;

for( int i = 0; i < text.size(); ++i)
{
QChar c = text[i];

if( prev == BACKSLASH )
{
int idx = SPECIAL_CHARS.indexOf( c );
if( idx != -1)
{
result.append( SPECIAL_QCHARS[idx] );
}
else
{
result.append( prev );
result.append( c );
}
prev = 0;
}
else
{
result.append( c );
prev = c;
}
}

return result;
}

关于c++ - qstring 到 qchar 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com