TStringList分割CSV文件成两部分添入ListView提示“越界”csv文件如下:R7,RESPACK-4,117.42mm,10.51m
TStringList分割CSV文件成两部分添入ListView提示“越界”
csv文件如下:
"R7","RESPACK-4","117.42mm","10.51mm","118.74mm","11.24mm","118.75mm","11.26mm","T","90.00","4.7K"
"C6","RESPACK-4","140.94mm","43.37mm","140.28mm","44.74mm","140.28mm","44.74mm","T","0.00","4.7K"
我只要前2列和后5列的数据(即上面黑体部分),我采用TStringList分割,并显示在ListView中,代码如下:
C/C++ codeif(OpenTextFileDialog1 -> Execute()) { csvFile -> LoadFromFile(OpenTextFileDialog1 -> FileName); for(int i = 0; i < csvFile -> Count; i++) // i表示行 { csvCol -> Delimiter = ','; csvCol -> DelimitedText = csvFile -> Strings[i]; TListItem *csvlist = ListView1 -> Items -> Add(); csvlist -> Caption = csvCol -> Strings[0]; for(int j = 1; j < csvCol -> Count - 9; j++) // j表示前2列, 共11列 { ListView1 -> Items -> Item[i] -> SubItems -> Add(csvCol -> Strings[j]); } for(int k = 7; k < csvCol -> Count; k++) // k表示后5列, 共11列 { ListView1 -> Items -> Item[i] -> SubItems -> Add(csvCol -> Strings[k]); } } }
但总是提示List index out of bounds(0),越界了。个人实在搞不定了,还请高手给指点一二,非常感谢!
[解决办法]改成这样试试?
for(int j = 1; j < csvCol -> Count - 9; j++) // j表示前2列, 共11列
{
csvlist -> SubItems -> Add(csvCol -> Strings[j]);
}
for(int k = 7; k < csvCol -> Count; k++) // k表示后5列, 共11列
{
csvlist -> SubItems -> Add(csvCol -> Strings[k]);
}
}
[解决办法] if( OpenTextFileDialog1->Execute() )
{
csvFile->LoadFromFile(OpenTextFileDialog1->FileName);
for(int i=0; i<csvFile->Count; i++) // i表示行
{
if ( csvFile->Strings[i].Length() > 10 ) // 这里过滤一下源文件中的空行或者不正确的行
{
csvCol->Clear();
csvCol->Delimiter = ',';
csvCol->DelimitedText = csvFile->Strings[i];
TListItem *csvlist = ListView1->Items->Add();
csvlist->Caption = csvCol->Strings[0];
for(int j=1; j < csvCol->Count-9; j++) // j表示前2列, 共11列
{
csvlist->SubItems->Add(csvCol->Strings[j]); // 这里,直接使用刚才创建的 LitItem 指针
}
for(int k = 6; k < csvCol->Count; k++) // k表示后5列, 共11列 // 这里有个错误,索引号不对,不是7,应该是6
{
csvlist->SubItems->Add(csvCol->Strings[k]); // 这里,直接使用刚才创建的 LitItem 指针
}
}
}
}