私は、「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()
{
}
前もって感謝します