【发布时间】:2013-07-29 21:30:02
【问题描述】:
我参与了一个项目,我需要从“csv”文件中读取数据,然后我需要将此信息存储在字符串数组中,以便在存储后搜索、写入、删除和添加信息。我从“csv”文件处理的字段是:
身份证、姓名、金额:
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
4563 安娜 $0.00
6789 诺埃米 $23.12
最终
问题是当我创建字符串数组时,总是在索引指向的当前单元格中写入(什么是正确的)但也覆盖以前的单元格(什么是不正确的),例如:
第 0 步:
cell0: 1234 马里奥 $100
第 1 步:
cell0:3245 弗朗西斯科 $15.50
cell1:3245 弗朗西斯科 $15.50
第三步:
cell0:4356 豪尔赫 $0.00
cell1:4356 豪尔赫 $0.00
cell2:4356 豪尔赫 $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()
{
}
提前谢谢你
【问题讨论】: