Tervehdys,
Arduinolla (nano) yritän tehdä seuraavaa:
SD-kortilla on tekstitiedosto: database.txt. Sisältö on seuraavaa muotoa:
1:9pv!gf3A l18M6Z4VR =Kiy#%B6l2T; 2:QJSM6Z4VR =Kiy#%B6Dp W!w^3ceaX; 3:Gz0w^5@h7 8?3M6Z4VR =Kiy#%B6DJ; 4:DnlnVkM6Z4VR =Kiy#%B62ZU nxtbm; 5:M6Z4VR =KiyM6Z4VR =Kiy#%B6#%B6; . . . 9999:jksdfJSiM6Z4VR =Kiy#%B6jsdkjj4;
Lopullinen tavoite olisi seuraava:
Ohjelmalle annetaan rivinumero esim."52:", jonka jälkeen se etsisi rivinumeron, ja kävisi hakemassa siitä seuraavat 30 merkkiä aina puolipilkkuun asti. Nämä 30 merkkiä talletettaisiin muuttujaan ja tulostettaisiin näyttöön. Kaksoispiste ja puolipilkku eivät kumpikaan esiinny varsinaisessa datassa.
Toistaiseksi kun taitoa ja ymmärrystä on vähän, täytyy mennä pala kerrallaan. Oheinen koodi hakee tiedostosta yhtä merkkiä (tai siihen asti), mutta mitenkähän pidemmän pätkän saisi haettua, vaikkapa kolme merkkiä "52:" ?
#include <SPI.h> #include <SD.h> File myFile; void setup() { Serial.begin(9600); while (!Serial) { ; } Serial.print("Initializing SD card..."); if (!SD.begin(4)) { Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); myFile = SD.open("database.txt"); String chr1 = myFile.readStringUntil('t'); // haetaan kunnes tavataan 't'-merkki. Serial.println(chr1); // tulostetaan merkkijono haettuun merkkiin asti. } void loop() { }
Voisit silmukassa lukea tiedostosta rivin kerrallaan (readStringUntil('\n')) ja tutkia sitten, alkaako rivi halutuilla merkeillä (startsWith("52:")).
Sen verran olen aikaa käyttänyt tätä pähkiessäni, että en olisi millään uskonut
jonkun pystyvän ratkaisemaan sen yhdellä lauseella. Näin kuitenkin kävi, ja sain haun toimimaan.
Kiitoksia kovasti avusta Metabolix !
Tämä on jälleen hieno esimerkki siitä, että tällä sivustolla autetaan kaikkia osaamistasosta riippumatta. Ja jopa yhdellä lauseella!
Aihe on jo aika vanha, joten et voi enää vastata siihen.