diff --git a/.gitignore b/.gitignore index fc766661fe..ff1808e7e0 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,7 @@ ipch/ Ankh.NoLoad .vs out +build CMakeSettings.json enc_temp_folder diff --git a/ApplicationCode/FileInterface/RifElementPropertyTableReader.cpp b/ApplicationCode/FileInterface/RifElementPropertyTableReader.cpp index a7a0665719..6e98315062 100644 --- a/ApplicationCode/FileInterface/RifElementPropertyTableReader.cpp +++ b/ApplicationCode/FileInterface/RifElementPropertyTableReader.cpp @@ -66,17 +66,20 @@ RifElementPropertyMetadata RifElementPropertyTableReader::readMetadata( const QS metadataBlockFound = true; continue; } + else if ( line.toUpper().startsWith( "*DISTRIBUTION" ) ) + { + metadata.fileName = fileName; + break; + } - if ( !metadataBlockFound ) continue; + if ( !metadataBlockFound || line.startsWith( "*" ) ) continue; - QStringList cols = RifFileParseTools::splitLineAndTrim( line, "," ); + QStringList cols = RifFileParseTools::splitLineAndTrim( line, ",", true ); - metadata.fileName = fileName; for ( QString s : cols ) { metadata.dataColumns.push_back( s ); } - break; } closeFile( file ); @@ -110,6 +113,7 @@ void RifElementPropertyTableReader::readData( const RifElementPropertyMetadata* QTextStream stream( file ); bool dataBlockFound = false; int lineNo = 0; + QStringList collectedCols; // Init data vectors table->elementIds.clear(); @@ -118,22 +122,39 @@ void RifElementPropertyTableReader::readData( const RifElementPropertyMetadata* while ( !stream.atEnd() ) { QString line = stream.readLine(); - QStringList cols = RifFileParseTools::splitLineAndTrim( line, "," ); + if ( !line.startsWith( "*" ) ) + { + if ( collectedCols.size() > 0 && collectedCols.size() != 8 ) + { + collectedCols.clear(); + } + + collectedCols << RifFileParseTools::splitLineAndTrim( line, ",", true ); + } + else + { + collectedCols.clear(); + } lineNo++; if ( !dataBlockFound ) { - if ( !line.startsWith( "*" ) && !line.startsWith( "," ) && cols.size() == expectedColumnCount ) + if ( !line.startsWith( "*" ) && !line.startsWith( "," ) && collectedCols.size() == expectedColumnCount ) + { dataBlockFound = true; + } + else if ( collectedCols.size() > expectedColumnCount ) + { + throw FileParseException( + QString( "Number of columns mismatch at %1:%2" ).arg( metadata->fileName ).arg( lineNo ) ); + } else + { continue; + } } - if ( cols.size() != expectedColumnCount ) - { - throw FileParseException( - QString( "Number of columns mismatch at %1:%2" ).arg( metadata->fileName ).arg( lineNo ) ); - } + QStringList cols = collectedCols; for ( int c = 0; c < expectedColumnCount; c++ ) { @@ -163,6 +184,8 @@ void RifElementPropertyTableReader::readData( const RifElementPropertyMetadata* table->data[c - 1].push_back( value ); } } + collectedCols.clear(); + dataBlockFound = false; } table->hasData = true; diff --git a/ApplicationCode/UnitTests/RifElementPropertyTableReader-Test.cpp b/ApplicationCode/UnitTests/RifElementPropertyTableReader-Test.cpp index b637906ab5..e6ac5fe440 100644 --- a/ApplicationCode/UnitTests/RifElementPropertyTableReader-Test.cpp +++ b/ApplicationCode/UnitTests/RifElementPropertyTableReader-Test.cpp @@ -53,3 +53,41 @@ TEST( RicElementPropertyTableReaderTest, ParseFailed ) EXPECT_TRUE( e.message.startsWith( "Number of columns mismatch" ) ); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( RicElementPropertyTableReaderTest, MoreThanEightColumns ) +{ + RifElementPropertyMetadata metadata = RifElementPropertyTableReader::readMetadata( + ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE_morethan8columns.inp" ); + + RifElementPropertyTable table; + RifElementPropertyTableReader::readData( &metadata, &table ); + + EXPECT_TRUE( table.hasData ); + + EXPECT_EQ( 9u, metadata.dataColumns.size() ); + EXPECT_STREQ( "MODULUS", metadata.dataColumns[0].toStdString().c_str() ); + EXPECT_STREQ( "MODULUS", metadata.dataColumns[1].toStdString().c_str() ); + EXPECT_STREQ( "MODULUS", metadata.dataColumns[2].toStdString().c_str() ); + EXPECT_STREQ( "RATIO", metadata.dataColumns[3].toStdString().c_str() ); + EXPECT_STREQ( "RATIO", metadata.dataColumns[4].toStdString().c_str() ); + EXPECT_STREQ( "RATIO", metadata.dataColumns[5].toStdString().c_str() ); + EXPECT_STREQ( "MODULUS", metadata.dataColumns[6].toStdString().c_str() ); + EXPECT_STREQ( "MODULUS", metadata.dataColumns[7].toStdString().c_str() ); + EXPECT_STREQ( "MODULUS", metadata.dataColumns[8].toStdString().c_str() ); + + + EXPECT_EQ( 9u, table.data.size() ); + EXPECT_EQ( 8u, table.elementIds.size() ); + EXPECT_EQ( 8u, table.data[0].size() ); + EXPECT_EQ( 8u, table.data[1].size() ); + EXPECT_EQ( 8u, table.data[2].size() ); + EXPECT_EQ( 8u, table.data[3].size() ); + EXPECT_EQ( 8u, table.data[4].size() ); + EXPECT_EQ( 8u, table.data[5].size() ); + EXPECT_EQ( 8u, table.data[6].size() ); + EXPECT_EQ( 8u, table.data[7].size() ); + EXPECT_EQ( 8u, table.data[8].size() ); +} diff --git a/ApplicationCode/UnitTests/TestData/RifElementPropertyTableReader/ELASTIC_TABLE_morethan8columns.inp b/ApplicationCode/UnitTests/TestData/RifElementPropertyTableReader/ELASTIC_TABLE_morethan8columns.inp new file mode 100644 index 0000000000..c0030b7b19 --- /dev/null +++ b/ApplicationCode/UnitTests/TestData/RifElementPropertyTableReader/ELASTIC_TABLE_morethan8columns.inp @@ -0,0 +1,24 @@ +** ELASTIC SETTING FOR EACH ELEMENT +*Distribution Table, name=RSV_Res-1_Elastic_Table +MODULUS, MODULUS, MODULUS, RATIO, RATIO, RATIO, MODULUS, +MODULUS, MODULUS +*Distribution, name=RSV_Res-1_ELASTICS, location=ELEMENT, Table=RSV_Res-1_Elastic_Table +** Description: Element-by-Element Elastic properties +, 5000000000.0, 5000000000.0, 5000000000.0, 0.20, 0.20, 0.20, 2083333333.3, +2083333333.3, 2083333333.3, +Res-1.9764, 4998669605.36, 4998515013.81, 4985819146.89, 0.20, 0.20, 0.20, 2082985108.55 +2083070114.11, 2083195609.10 +Res-1.9763, 4998378764.10, 4996164940.36, 4967298321.58, 0.20, 0.20, 0.20, 2081274342.77 +2083260687.92, 2083208458.19 +Res-1.9762, 4998328556.97, 4995561505.50, 4964174759.06, 0.20, 0.20, 0.20, 2080763818.91 +2083292591.66, 2083261000.75 +Res-1.9761, 4998322867.69, 4994775664.48, 4958309492.44, 0.20, 0.20, 0.20, 2079995008.83 +2083319853.08, 2083286460.02 +Res-1.9760, 4998346381.04, 4994364077.05, 4955669201.25, 0.20, 0.20, 0.20, 2079617885.94 +2083326454.00, 2083303403.23 +Res-1.9759, 4998383500.18, 4994047179.49, 4953310980.82, 0.20, 0.20, 0.20, 2079279656.11 +2083330439.00, 2083313410.86 +Res-1.9758, 4998414899.36, 4993818845.60, 4951718769.13, 0.20, 0.20, 0.20, 2079052099.57 +2083331777.84, 2083319849.17 +Res-1.9757, 4998444377.89, 4993643343.12, 4950414224.86, 0.20, 0.20, 0.20, 2078864720.70 +2083332526.54, 2083323962.41