0

私は、「csv」ファイルからデータを読み取る必要があるプロジェクトに関与しており、保存後に情報を検索、書き込み、削除、および追加するために、この情報を文字列の配列に保存する必要があります。「csv」ファイルから処理するフィールドは次のとおりです。

ID、名前、金額:

1234 マリオ $100
3245 フランシスコ $15.50
4356 ホルヘ $0.00
4321 パブロ $0.00
2346 ルネ $0.00 8795
ソフィア $233.20 3569 サンドラ $
0.00
8907 アンドレア $0.00
6890 マル $0.00


問題は、文字列の配列を作成するときです。インデックスが指す現在のセルに常に書き込みますが (正しいこと)、前のセルも上書きします (正しくないこと)。例:

ステップ 0:
cell0: 1234 マリオ $100

step1:
cell0:3245 フランシスコ $15.50
cell1:3245 フランシスコ $15.50

step3:
cell0:4356 Jorge $0.00
cell1:4356 Jorge $0.00
cell2:4356 Jorge $0.00

等々...

最後に推測できるように、文字列の配列のすべてのセルに最後の情報、6789 Noemi $23.12 があり、正しい情報はありません。コードは次のとおりです。

#include <SD.h>

//Ajustes SPI
//MOSI, MISO, SCLK estan predeterminados
int CS_pin=8;

char in_char=0;
String datosSD="";

int x=0;
char myStrings[60];
char* arrayStrings[13];  

void setup()
{
Serial.begin(9600);    //Se inicializa velocidad de comunicación serial
Serial.println("Inicializando microSD");

pinMode(CS_pin,OUTPUT);  //Se configura Pin CS (8) como salida

  //Se verifica si la tarjeta esta lista
  if(!SD.begin(CS_pin))
  {
    Serial.println("Fallo microSD");
    return;
  }
   Serial.println("miscroSD lista");

  //Se abre un archivo para escribir en el
  //Solo un archivo se puede abrir a la vez
  File datoArchivo=SD.open("TEST.csv");
  in_char=datoArchivo.read();

//Se verifica si la apertura del archivo tuvo éxito para poder escribir en el archivo
if(datoArchivo)
{ 
    while(datoArchivo.available())
    {
      if(in_char!='\n')
      {
        datosSD.concat(in_char);
        in_char = datoArchivo.read();
      }
      else
         {
           Serial.println(datosSD);              
           datosSD.toCharArray(myStrings, 60);  
           arrayStrings[x]=myStrings;
           x++;

             in_char = datoArchivo.read();
             datosSD="";
       }  
    } 
   datoArchivo.close(); 
}
else
  {
    Serial.println("No se pudo Accesar al Archivo");
  } 
/////////// Show the information of Array of Strings /////////////////    
 for (int i = 0; i < 13; i++)
 {
  Serial.println(arrayStrings[i]);
  delay(100);
 }
//////////////////////////////////////////////////////////////////////    
}

void loop()
{ 
}  

前もって感謝します

4

2 に答える 2