Search code examples
ibm-doors

String Newline not displaying in Doors


I have csv file containing some data like:

374,Test Comment multiplelines \n Here's the 2nd line,Other_Data

Where 374 is the object ID from doors, then some commentary and then some other data. I have a piece of code that reads the data from the CSV file, stores it in the appropriate variables and then writes it to the doors Object.

Module Openend_module = edit("path_to_mod", true,true,true)
Object o ;
Column c;
string attrib;
string oneLine ;
string OBJECT_ID = "";
string Comment = "";
String Other_data = "";

int offset;

string split_text(string s)
{
        if (findPlainText(s, sub, offset, len, false)) 
        {
            return s[0 : offset -1]   
        } 
        else 
        {
            return ""
        }
}

Stream input = read("Path_to_Input.txt");
input >> oneLine
OBJECT_ID = split_text(oneLine)
oneLine = oneLine[offset+1:]
Comment = split_text(oneLine)
Other_data = oneLine[offset+1:]

When using print Comment the output in the DXL console is : Test Comment multiplelines \n Here's the 2nd line

for o in Opened_Module do 
{
if (o."Absolute Number"""==OBJECT_ID ){
   attrib = "Result_Comment " 2
   o.attrib = Comment
  }
}

But after writing to the doors object, the \n is not taken into consideration and the result is as follows:

enter image description here

I've tried putting the string inside a Buffer and using stringOf() but the escape character just disappeared. I've also tried adding \r\n and \\n to the input csv text but still no luck


Solution

  • This isn't the most efficient way of handling this, but I have a relatively straightforward fix.

    I would suggest adding the following:

    Module Openend_module = edit("path_to_mod", true,true,true)
    Object o ;
    Column c;
    string attrib;
    string oneLine ;
    string OBJECT_ID = "";
    string Comment = "";
    String Other_data = "";
    
    int offset;
    
    string split_text(string s)
    {
            if (findPlainText(s, sub, offset, len, false)) 
            {
                return s[0 : offset -1]   
            } 
            else 
            {
                return ""
            }
    }
    
    Stream input = read("Path_to_Input.txt");
    input >> oneLine
    OBJECT_ID = split_text(oneLine)
    oneLine = oneLine[offset+1:]
    Comment = split_text(oneLine)
    Other_data = oneLine[offset+1:]
    
    //Modification to comment string
    int x
    int y
    while ( findPlainText ( Comment , "\\n" , x , y , false ) ) {
         Comment = ( Comment [ 0 : x - 1 ] ) "\n" ( Comment [ x + 2 : ] )
    }
    

    This will run the comment string through a parser, replacing string "\n" with the char '\n'. Be aware- this will ignore any trailing spaces at the end of a line.

    Let me know if that helps.