Buondì, mi ritrovo ancora qui a chieder un piccolo aiuto ![]()
Nel listato che segue, devo inserire una stringa all'interno di un'altra più grande, usando i metodi .substring e l'operatore di aggregazione delle stringhe.
Il problema età nel fatto che la prima concatenazione funziona, la seconda no...e la stringa rimane incompleta.
Codice Parziale :
String sub1 = s.substring(0, s_index);
String sub2 = s.substring(s_index);
Serial.print("SubString1 : ");
Serial.println(sub1);
Serial.print("SubString2 : ");
Serial.println(sub2);
s=String(); // Pulisco "s"
s = sub1 ;
s += "CARATTERE";
s += sub2;
Sketch TOTALE
/* Queso sketch Legge un file testo in ingresso e produce un file "test.txt" uguale, memorizzato su SD card. */
#include <SPI.h>
#include <SD.h>
int i=0;
void setup() {
Serial.begin(9600);
if (!SD.begin(4)) { Serial.print("Errore sulla SD..."); return; }
}
void loop()
{
if(i==0){ // Senza questo, il loop leggerebbe il file continuamente, senza fine..
i++;
char c;
String s=String();
char* file_to_load = "index.htm";
File htmlFile = SD.open( file_to_load );
if (!htmlFile) {
Serial.print("Errore : Il file ' ");
Serial.print(file_to_load);
Serial.println("' non esiste!");
exit(0);
}
if (SD.exists("test.htm")) {
Serial.println("'test.txt' esiste gia'...rimozione in corso..'");
SD.remove("test.htm");
}
// Creo un nuovo file per scriverci su la versione modificata dell'altro
File myFile = SD.open("test.htm", FILE_WRITE);
// Ricevo i caratteri
Serial.println("Lettura File");
/* 1* VERSIONE
while (htmlFile.available()) {
boolean end_row = false;
s = String();
while(!end_row && htmlFile.available()) {
c = htmlFile.read();
if(c == '\n'){
end_row = true;
}
s += c;
}// FINE RIGA
Serial.println(s);
myFile.println(s);
}*/
// 2° VERSIONE
boolean end_row = false;
while (htmlFile.available()) {
c = htmlFile.read();
// in ogni caso, aggiungo il carattere alla stringa
s += c;
// ho raggiunto la fine della riga?
if(c == '\n'){
end_row = true;
}
// Se ho raggiunto la fine, stampo, azzero le variabili e passo alla successiva
if(end_row) {
// Verifico se quella ricevuta è una stringa da modificare
int s_index = find_index(s);
if(s_index>-1) { // Ho trovato il tag "id=value"
Serial.print("Indice trovato a : ");
Serial.println(s_index);
String sub1 = s.substring(0, s_index);
String sub2 = s.substring(s_index);
Serial.print("SubString1 : ");
Serial.println(sub1);
Serial.print("SubString2 : ");
Serial.println(sub2);
s=String(); // Pulisco "s"
s = sub1 ;
s += "CARATTERE";
s += sub2;
sub1 = String();
sub2 = String();
}
Serial.println(s);
myFile.println(s);
end_row = false;
s = String();
}// FINE RIGA
}
// Se è l'ultima stringa, non ci son più caratteri da leggere..
s += '\n';
// Scrivo l'ultima stringa del file
myFile.println(s);
Serial.println("Scrittura Terminata");
htmlFile.close();
myFile.close();
Serial.println("");
Serial.println("Lettura del File Scritto");
Serial.println("");
myFile = SD.open("test.htm", FILE_READ);
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
} // fine - if(i=0)
}
int find_index(String s){
int index=s.indexOf("value");
if(index>-1) { // Ho trovato il tag "id=value"
return (index + 10); // Index + 5 (caratteri di "value") + 5 (numero del tag all'interno della tablella html, x_y)
}else
return (-1);
}