Fixed issue #6034 - Improve INP import : Add support for columns spanning more than one line.

This commit is contained in:
rubenthoms 2020-08-14 17:48:27 +02:00 committed by rubenthoms
parent 523cdc2b7d
commit 3a5ef7fb86
4 changed files with 97 additions and 11 deletions

1
.gitignore vendored
View File

@ -60,6 +60,7 @@ ipch/
Ankh.NoLoad
.vs
out
build
CMakeSettings.json
enc_temp_folder

View File

@ -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;

View File

@ -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() );
}

View File

@ -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