Mesh Oriented datABase  (version 5.5.1)
An array-based unstructured mesh library
cleanTags.cpp File Reference
#include "moab/MOABConfig.h"
#include "moab/ProgOptions.hpp"
#include "moab/Core.hpp"
+ Include dependency graph for cleanTags.cpp:

Go to the source code of this file.

Functions

vector< string > split (const string &i_str, const string &i_delim)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 35 of file cleanTags.cpp.

36 {
37 
38  ProgOptions opts;
39 
40  string inputfile, outputfile, deleteTags, keepTags;
41  opts.addOpt< string >( "input,i", "input filename ", &inputfile );
42  opts.addOpt< string >( "output,o", "output file", &outputfile );
43 
44  opts.addOpt< string >( "deleteTags,d", "delete tags ", &deleteTags );
45  opts.addOpt< string >( "keepTags,k", "keep tags ", &keepTags );
46  opts.parseCommandLine( argc, argv );
47 
48  Core core;
49  Interface* mb = &core;
50  ErrorCode rval;
51  rval = mb->load_file( inputfile.c_str() );MB_CHK_ERR( rval );
52  vector< Tag > existingTags;
53  rval = mb->tag_get_tags( existingTags );MB_CHK_ERR( rval );
54  vector< string > tagsToDelete;
55  if( !keepTags.empty() )
56  {
57  vector< string > tagsToKeep = split( keepTags, string( ":" ) );
58  for( size_t i = 0; i < existingTags.size(); i++ )
59  {
60  string tname;
61  rval = mb->tag_get_name( existingTags[i], tname );MB_CHK_ERR( rval );
62  bool deleteTag = false;
63  for( size_t k = 0; k < tagsToKeep.size() && !deleteTag; k++ )
64  {
65  if( tname.compare( tagsToKeep[k] ) == 0 ) deleteTag = true;
66  }
67  if( !deleteTag ) tagsToDelete.push_back( tname );
68  }
69  }
70  if( !deleteTags.empty() )
71  {
72  tagsToDelete = split( deleteTags, string( ":" ) );
73  }
74  for( size_t i = 0; i < tagsToDelete.size(); i++ )
75  {
76  Tag tag;
77  rval = mb->tag_get_handle( tagsToDelete[i].c_str(), tag );
78  if( rval == MB_SUCCESS && tag != NULL )
79  {
80  rval = mb->tag_delete( tag );MB_CHK_ERR( rval );
81  }
82  }
83  cout << "write file " << outputfile << endl;
84  rval = mb->write_file( outputfile.c_str() );MB_CHK_ERR( rval );
85 
86  return 0;
87 }

References ProgOptions::addOpt(), ErrorCode, moab::Core::load_file(), mb, MB_CHK_ERR, MB_SUCCESS, ProgOptions::parseCommandLine(), split(), moab::Core::tag_delete(), moab::Core::tag_get_handle(), moab::Core::tag_get_name(), moab::Core::tag_get_tags(), and moab::Core::write_file().

◆ split()

vector< string > split ( const string &  i_str,
const string &  i_delim 
)

Definition at line 18 of file cleanTags.cpp.

19 {
20  vector< string > result;
21 
22  size_t found = i_str.find( i_delim );
23  size_t startIndex = 0;
24 
25  while( found != string::npos )
26  {
27  result.push_back( string( i_str.begin() + startIndex, i_str.begin() + found ) );
28  startIndex = found + i_delim.size();
29  found = i_str.find( i_delim, startIndex );
30  }
31  if( startIndex != i_str.size() ) result.push_back( string( i_str.begin() + startIndex, i_str.end() ) );
32  return result;
33 }

Referenced by main().