我有以下内容:
ReadValuesAndWriteIntoGUI()
{
QFile File (Directory + "/here/we/go");
Qstring ValueAString
Qstring ValueBString
Qstring ValueCString
Qstring ValueDString
if(File.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream Stream (&File);
QString Text;
do
{
Text = Stream.readLine();
Text = Text.simplified();
// Vala
QString startWith = "[1 -3 0 0 0 0 0]";
QString endWith = ";" ;
int start = Text.indexOf(startWith, 0, Qt::CaseInsensitive);
int end = Text.indexOf(endWith, start + startWith.length(), Qt::CaseInsensitive);
if(start != -1)
ValueAString = Text.mid(start + startWith.length(), end - ( start + startWith.length() ) );
qDebug() << ValueAString << (start + startWith.length()) << (end - (start + startWith.length()));
double Avalue = ValueAString.toDouble();
ui.AInput->setValue(Avalue);
//Valb
QString startWith2 = "[1 -3 0 0 0 0 0]";
QString endWith2 = ";" ;
int start2 = Text.indexOf(startWith2, start + startWith.length(), Qt::CaseInsensitive);
int end2 = Text.indexOf(endWith2, start2 + startWith2.length(), Qt::CaseInsensitive);
if(start2 != -1)
ValueBString = Text.mid(start2 + startWith2.length(), end2 - ( start2 + startWith2.length() ) );
qDebug() << ValueBString << (start2 + startWith2.length()) << (end2 - (start2 + startWith2.length()));
double Bvalue = ValueBString.toDouble();
ui.BInput->setValue(Bvalue);
//Valc
QString startWith3 = "[0 2 -1 0 0 0 0]";
QString endWith3 = ";" ;
int start3 = Text.indexOf(startWith3, 0, Qt::CaseInsensitive);
int end3 = Text.indexOf(endWith3, start3 + startWith3.length(), Qt::CaseInsensitive);
if(start3 != -1)
ValueCString = Text.mid(start3 + startWith3.length(), end3 - ( start3 + startWith3.length() ) );
qDebug() << ValueCString << (start3 + startWith3.length()) << (end3 - (start3 + startWith3.length()));
double CValue = ValueCString.toDouble();
ui.CInput->setValue(CValue);
//Vald
QString startWith4 = "[0 2 -1 0 0 0 0]";
QString endWith4 = ";" ;
int start4 = Text.indexOf(startWith4, start3 + startWith3.length(), Qt::CaseInsensitive);
int end4 = Text.indexOf(endWith4, start4 + startWith4.length(), Qt::CaseInsensitive);
if(start2 != -1)
ValueDString = Text.mid(start4 + startWith4.length(), end4 - ( start4 + startWith4.length() ) );
qDebug() << ValueDString << (start4 + startWith4.length()) << (end4 - (start4 + startWith4.length()));
double Dvalue = ValueDString.toDouble();
ui.DInput->setValue(Dvalue);
}
while(!Text.isNull());
}
}
文本文件如下:
File
{ vers 0;
form ci;
ass dict;
loc "cons";
ect Proper;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
a
{
Model New;
bla bla [0 2 -1 0 0 0 0] 2; //HERE I wanted to read ValueC=2
bli bli [1 -3 0 0 0 0 0] 4; //HERE I wanted to read ValueA=4
t t [0 1 0 0 0 0 0] 0.003;
}
b
{
Model New;
bla bla [0 2 -1 0 0 0 0] 1; //HERE I wanted to read ValueD=1
bli bli [1 -3 0 0 0 0 0] 3; //HERE I wanted to read ValueB=3
t t [0 1 0 0 0 0 0] 0;
}
.
.
.
我在GUI中得到的结果是:
ui.AInput = 3 which originally is ValueB
ui.BInput = 0 ?
ui.CInput = 0,000000003000 ?
ui.DInput = 0 ?
如您所见,我使用了QString :: indexof和QString :: mid方法来获取QStrings,但到目前为止,它并不适用于这些QStrings。 谁知道我失败了?问候
答案 0 :(得分:1)
if (offset=0)
=&gt; if (offset==0)
;)
考虑到您的意见,我不明白您认为ValueB应该是什么。您一次只读一行,因此始终只有一行startWith
,因此只有ValueA。
这是(我认为)你想要实现的目标:
ReadValuesAndWriteIntoGUI()
{
QString ValueAString;
QString ValueBString;
QFile File (Directory + "/here/we/go");
if(File.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream Stream (&File);
QString Text;
int occ=0;
do
{
Text = Stream.readLine();
Text = Text.simplified();
QString startWith = "[1 -3 0 0 0 0 0]";
QString endWith = ";" ;
int startWithPosition = Text.indexOf(startWith, 0, Qt::CaseInsensitive);
if(startWithPosition < 0)
{
break;
}
int endWithPosition = Text.indexOf(endWith, startWithPosition + startWith.length(), Qt::CaseInsensitive);
if(endWithPosition < 0)
{
break;
}
if (occ==0)
{
ValueAString = Text.mid(startWithPosition + startWith.length(), (endWithPosition - (startWithPosition + startWith.length())));
qDebug() << ValueAString << (startWithPosition + startWith.length()) << (endWithPosition - (startWithPosition + startWith.length()));
double ValueA = ValueAString.toDouble();
ui.ValueAInput->setValue(ValueA);
occ++;
}
else if (occ==1)
{
ValueBString = Text.mid(startWithPosition + startWith.length(), (endWithPosition - (startWithPosition + startWith.length())));
qDebug() << ValueBString << (startWithPosition + startWith.length()) << (endWithPosition - (startWithPosition + startWith.length()));
double ValueB = ValueBString.toDouble();
ui.ValueBInput->setValue(ValueB);
}
} // close do command
while(!Text.isNull());
} //close method "ReadValuesAndWriteIntoGUI()"
}