anAttr.myIsNull = false;
anAttr.myFieldType = DBF_FieldType_Integer;
anAttr.myRawValue = DBFReadStringAttribute( myHDBF, i, theIndexOfField );
- anAttr.myStrVal = QString::number(iAttr);
+ anAttr.myIntVal = iAttr;
break;
}
anAttr.myIsNull = false;
anAttr.myFieldType = DBF_FieldType_Double;
anAttr.myRawValue = DBFReadStringAttribute( myHDBF, i, theIndexOfField );
- anAttr.myStrVal = QString::number(dAttr, 'g', 20);
+ anAttr.myDoubleVal = dAttr;
break;
}
default:
}
-bool HYDROData_ShapeFile::DBF_WriteFieldAndValues(const QString& theFileName, const QString& theFieldName, DBF_FieldType theType, const std::vector<DBF_AttrValue>& theAttrV, bool bUseStrValue)
+bool HYDROData_ShapeFile::DBF_WriteFieldAndValues(const QString& theFileName, const QString& theFieldName, DBF_FieldType theType, const std::vector<DBF_AttrValue>& theAttrV, bool bUseRawValue)
{
// Check that given field type is equal to field types of attributes values
for (size_t i = 0; i < theAttrV.size(); i++)
}
int stat = -1;
- //use raw values only //TODO
- for (size_t i = 0; i < theAttrV.size(); i++)
+ if (bUseRawValue)
{
- if (!theAttrV[i].myIsNull)
- stat = DBFWriteStringAttribute(hDBF, (int)i, 0, theAttrV[i].myRawValue.c_str());
- else
- stat = DBFWriteNULLAttribute(hDBF, (int)i, 0 );
+ for (size_t i = 0; i < theAttrV.size(); i++)
+ {
+ if (!theAttrV[i].myIsNull)
+ stat = DBFWriteStringAttribute(hDBF, (int)i, 0, theAttrV[i].myRawValue.c_str());
+ else
+ stat = DBFWriteNULLAttribute(hDBF, (int)i, 0 );
- if (stat != 1)
+ if (stat != 1)
+ {
+ DBFClose( hDBF );
+ return false;
+ }
+ }
+ }
+ else
+ {
+ for (size_t i = 0; i < theAttrV.size(); i++)
{
- DBFClose( hDBF );
- return false;
+ if (!theAttrV[i].myIsNull)
+ switch( theType )
+ {
+ case DBF_FieldType_String:
+ {
+ stat = DBFWriteStringAttribute(hDBF, (int)i, 0, theAttrV[i].myStrVal.toStdString().c_str());
+ break;
+ }
+
+ case DBF_FieldType_Integer:
+ {
+ stat = DBFWriteIntegerAttribute(hDBF, (int)i, 0, theAttrV[i].myIntVal);
+ break;
+ }
+
+ case DBF_FieldType_Double:
+ {
+ stat = DBFWriteDoubleAttribute(hDBF, (int)i, 0, theAttrV[i].myDoubleVal);
+ break;
+ }
+ default:
+ break;
+ }
+ else
+ stat = DBFWriteNULLAttribute(hDBF, (int)i, 0 );
+
+ if (stat != 1)
+ {
+ DBFClose( hDBF );
+ return false;
+ }
}
}
aSHPFile.DBF_GetAttributeList(2, theAttrV );
CPPUNIT_ASSERT_EQUAL( 3269, (int)theAttrV.size() );
CPPUNIT_ASSERT_EQUAL( true, std::string("6621.1654324936000000000000000000") == theAttrV[2].myRawValue);
- CPPUNIT_ASSERT_EQUAL( true, QString("6621.1654324935998375") == theAttrV[2].myStrVal);
+ CPPUNIT_ASSERT_EQUAL( 6621.1654324935998375, theAttrV[2].myDoubleVal);
CPPUNIT_ASSERT_EQUAL( false, theAttrV[2].myIsNull);
CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_Double, theAttrV[2].myFieldType);
void test_HYDROData_ShapeFile::test_DbfWrite()
{
- HYDROData_ShapeFile aSHPFile;
- QString tempFN = REF_PATH + "/temp_dbf1.dbf";
- QString refFN = REF_PATH + "/ref_dbf1.dbf";
- std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
- HYDROData_ShapeFile::DBF_AttrValue theAttr1;
- theAttr1.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
- theAttr1.myIsNull = false;
- theAttr1.myRawValue = "test_value1";
- theAttr1.myStrVal = "test_value1";
- theAttrV.push_back(theAttr1);
- HYDROData_ShapeFile::DBF_AttrValue theAttr2;
- theAttr2.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
- theAttr2.myIsNull = false;
- theAttr2.myRawValue = "test_value2";
- theAttr2.myStrVal = "test_value2";
- theAttrV.push_back(theAttr2);
- //
- aSHPFile.DBF_WriteFieldAndValues(tempFN, "test_field_name", HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, false);
-
- CPPUNIT_ASSERT(compare_two_files(tempFN, refFN));
- CPPUNIT_ASSERT_EQUAL( 0, remove (tempFN.toStdString().c_str()));
+ {
+ HYDROData_ShapeFile aSHPFile;
+ QString tempFN = REF_PATH + "/temp_dbf1.dbf";
+ QString refFN = REF_PATH + "/ref_dbf1.dbf";
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
+ HYDROData_ShapeFile::DBF_AttrValue theAttr1;
+ theAttr1.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ theAttr1.myIsNull = false;
+ theAttr1.myRawValue = "test_value1";
+ theAttr1.myStrVal = "test_value1";
+ theAttrV.push_back(theAttr1);
+ HYDROData_ShapeFile::DBF_AttrValue theAttr2;
+ theAttr2.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ theAttr2.myIsNull = false;
+ theAttr2.myRawValue = "test_value2";
+ theAttr2.myStrVal = "test_value2";
+ theAttrV.push_back(theAttr2);
+ //
+ CPPUNIT_ASSERT(aSHPFile.DBF_WriteFieldAndValues(tempFN, "test_field_name", HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, true));
+
+ CPPUNIT_ASSERT(compare_two_files(tempFN, refFN));
+ CPPUNIT_ASSERT_EQUAL( 0, remove (tempFN.toStdString().c_str()));
+ }
+
+ {
+ HYDROData_ShapeFile aSHPFile;
+ QString tempFN = REF_PATH + "/temp_dbf2.dbf";
+ QString refFN = REF_PATH + "/ref_dbf2.dbf";
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
+ HYDROData_ShapeFile::DBF_AttrValue theAttr1;
+ theAttr1.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ theAttr1.myIsNull = false;
+ theAttr1.myRawValue = "test_value1";
+ theAttr1.myStrVal = "test_value1";
+ theAttrV.push_back(theAttr1);
+
+ HYDROData_ShapeFile::DBF_AttrValue theAttr2;
+ theAttr2.myIsNull = false;
+ theAttr2.myRawValue = "test_value_K";
+ theAttr2.myStrVal = "test_value_K";
+ theAttr2.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ for (int ii = 0; ii < 100; ii++)
+ theAttrV.push_back(theAttr2);
+
+ HYDROData_ShapeFile::DBF_AttrValue theAttr3;
+ theAttr3.myIsNull = true;
+ theAttr3.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ for (int ii = 0; ii < 100; ii++)
+ theAttrV.push_back(theAttr3);
+ //
+ CPPUNIT_ASSERT(aSHPFile.DBF_WriteFieldAndValues(tempFN, "test_field_name", HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, true));
+
+ CPPUNIT_ASSERT(compare_two_files(tempFN, refFN));
+ CPPUNIT_ASSERT_EQUAL( 0, remove (tempFN.toStdString().c_str()));
+ }
}