String.remove() Issue

I am trying to use a String to store variables from external sensors. When I receive a new sensor reading, I use the MAC address to search inside the String. If I find it, I then look for my ending delimiter. Find how many characters it is and then do a String.delete().

What I am finding is the entire String gets deleted instead of keeping the old data.

Here is the code

#include <XBee.h>
#include <SoftwareSerial.h>

String  storedData;
bool insertCheck = true;


XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
// create reusable response objects for responses we expect to handle 
ZBRxResponse rx = ZBRxResponse();
ModemStatusResponse msr = ModemStatusResponse();

void setup() {  
  // start serial
  Serial.begin(9600);
   Serial1.begin(9600);
    xbee.setSerial(Serial1);  
  Serial.println("starting up yo!");
}

void loop() {


    xbee.readPacket();   
    if (xbee.getResponse().isAvailable()) {          
      if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {      
        xbee.getResponse().getZBRxResponse(rx);                             
        if (rx.getOption() == ZB_PACKET_ACKNOWLEDGED) {                  
            } else {
          Serial.println("packet not acknowledged");
        }
       
      String iDnodeMsb = String(rx.getRemoteAddress64().getMsb(), HEX);
      String iDnodeLsb = String(rx.getRemoteAddress64().getLsb(), HEX);
      String iDnode;
      
       if (iDnodeMsb.length() <= 6){
        iDnode = String("00" + iDnodeMsb + iDnodeLsb);}
      else {iDnode = String(iDnodeMsb + iDnodeLsb); }
        Serial.println(iDnode);


 
        unsigned int  macSearch = storedData.indexOf(iDnode);
                
        if(macSearch > 0 && macSearch < 4294967292){
           unsigned int startDelimeter = macSearch - 1 ;            
           unsigned int endDelimeter = storedData.indexOf(">", macSearch);

          Serial.print("Start delimiter is: ");
          Serial.println(startDelimiter);
          Serial.print("End delimiter is: ");
          Serial.println(endDelimiter);
          
           unsigned int toRemove = startDelimiter - endDelimiter ;
           storedData.trim();
           storedData.remove(startDelimeter, toRemove);
          
           Serial.print("Before reading the Data: ");
           Serial.println(storedData);
          }
          
       
          storedData.concat("<" + iDnode);
       
                   
         
         for (int i = 0; i < rx.getDataLength(); i++) {
          Serial.print("payload [");
          Serial.print(i, DEC);
          Serial.print("] is ");
          Serial.println(rx.getData()[i], HEX);

            String a = String(rx.getData()[i], HEX);
            storedData.concat("." + a);          
        }
          
           storedData.concat(">");
        
        Serial.print("Ending Data: ");
        Serial.println(storedData);

  
      }
    } else if (xbee.getResponse().isError()) {
      Serial.print("oh no!!! error code:");
      Serial.println(xbee.getResponse().getErrorCode());
    }
}

And here is my output

0013A20040F7836E
payload [0] is 48
payload [1] is 49
payload [2] is 5D
payload [3] is 5E
payload [4] is 1
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 1
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.1>
0013A20040F5180C
payload [0] is 51
payload [1] is 43
payload [2] is 0
payload [3] is FE
payload [4] is 0
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 1
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.1><0013A20040F5180C.51.43.0.FE.0.0.0.0.1.1>
0013A20040F7836E
Start delimiter is: 0
End delimiter is: 41
Before reading the Data: 
payload [0] is 48
payload [1] is 49
payload [2] is 5D
payload [3] is 5E
payload [4] is 1
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 0
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.0>
0013A20040F5180C
payload [0] is 51
payload [1] is 43
payload [2] is 0
payload [3] is FE
payload [4] is 0
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 0
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.0><0013A20040F5180C.51.43.0.FE.0.0.0.0.1.0>
0013A20040F7836E
Start delimiter is: 0
End delimiter is: 41
Before reading the Data: 
payload [0] is 48
payload [1] is 49
payload [2] is 5D
payload [3] is 5E
payload [4] is 1
payload [5] is 0
payload [6] is 0
payload [7] is 0
payload [8] is 1
payload [9] is 1
Ending Data: <0013A20040F7836E.48.49.5D.5E.1.0.0.0.1.1>

:

Any help would be Great. Basically I am trying to have any old sensor data stay there and new sensor data deleted and inserted with new the new data set.

I am looking at the reference for the String object. I don't see a delete function.

I meant String.remove()

Try printing out toRemove to see how many characters you're telling remove() to remove from the string.

        unsigned int  macSearch = storedData.indexOf(iDnode);

This is stupid. indexOf() returns an int, so it can return -1 to tell you that the string being search for doesn't exist.

           unsigned int toRemove = startDelimiter - endDelimiter ;
           storedData.trim();
           storedData.remove(startDelimeter, toRemove);

After determine where to remove data, possibly change the String instance, and THEN remove the stuff you don't want. Why the heck don't you trim the String FIRST? Or trim the String AFTER removing the stuff you don't want.