Leer fila a fila archivo .txt y obtener 4 variables

Hola a todos, les agradezco de antemano el apoyo que me puedan brindar, les comento, estoy realizando un proyecto con controles rf, cuando lea un control necesito comparar con una base de datos de un archivo de texto en una sd, si el control existe en esa base de datos realizar unas acciones, tengo un programa que me funciona con base de datos pequeña,almaceno todo en una variable String y luego voy obteniendo datos, pero cuando supero los 300 bytes la variable no me aguanta y el programa no lee nada, no soy bueno con el tema de arreglos, quisiera que me ayuden por favor dándome ideas de algún arreglo para almacenar en la variable solo una fila a la vez y no todo el archivo, Gracias.
Acá les envió el código que estoy usando para la prueba y el ejemplo de base de datos.

#include<Wire.h>
#include<Separador.h>
#include <SPI.h>    // incluye libreria interfaz SPI
#include <SD.h>     // incluye libreria para tarjetas SD
#define SSpin 10    // Slave Select en pin digital 10

unsigned long control;
int fila;
int salida;
File database; 
Separador S; 
void setup() {
  
        Serial.begin(9600);       // inicializa monitor serie a 9600 bps
        Wire.begin();
      
        //rtc.setDateTime(dt);    //Adjust date-time as defined 'dt' above (QUITAR COMENTARIOS LA PRIMERA CARGA PARA PROGRAMAR EL MODULO DE RELIOJ CON ESTA HORA,VOLVER A CARGAR DESPUES COMENTARIADO)
        Serial.println("Inicializando tarjeta SD...");  // texto en ventana de monitor 
        delay(2000);
        
        if (!SD.begin(SSpin)) {     // inicializacion de tarjeta SD
          Serial.println("fallo en inicializacion !");// si falla se muestra texto correspondiente y
          delay(2000);
          return;         // se sale del setup() para finalizar el programa
        }
      
        
        Serial.println("inicializacion correcta");  // texto de inicializacion correcta
        database = SD.open("database.txt", FILE_WRITE);

}

void loop() {
  database = SD.open("database.txt");    // apertura de archivo 
  int i=0;
  int j=1;
  int k=2;
  int l=3;
  Serial.println("Entrada");
  while (database.available()) 
  
    {
       String captura_datos  = database.readString(); // lee y almacena todo el archivo database¡¡¡¡¡¡¡¡

      while(control!=1)// para el programa de prueba la ultima lina del arvhivo es 1,1,1,1
      {
           // leo los datos almacenados en las primeras casillas con separacion por comas   
           String datosfila=S.separa(captura_datos,',',i); 
           String datoscontrol=S.separa(captura_datos,',',j);
           String datospersona=S.separa(captura_datos,',',k);
           String datossalida=S.separa(captura_datos,',',l);
           
         //convierto las variables obtenidas
          fila=datosbandera.toInt();  
          control=datoscontrol.toInt(); 
          salida=datossalida.toInt(); 
         // imprimo datos aun en String para verificar 
          Serial.println("datos cargados");
          Serial.print(datosfila);
          Serial.print(",");
          Serial.print(datoscontrol);
          Serial.print(",");
          Serial.print(datospersona);
          Serial.print(",");
          Serial.println(datossalida);
          
          // imprimo variable convertidas a int
          Serial.println("datos convertidos");
          Serial.println(fila);
          Serial.println(control);
          Serial.println(salida);
          
          i=i+4;
          j=j+4;
          k=k+4;
          l=l+4;
          
          delay(3000);
      }
         
         database.close();
         Serial.println("salida");
             
        control=0;
     }

         
}

Base de datos tipo: num fila, codigo control,datos,salida a activar

1,5592512,Andrea Perez 205,2,
2,5592525,carlos Perez 504,5,
3,5592568,Jimmy Calderon 602,6,
4,5592593,Angie Jurado 208,2,
5,1,1,1,1,