Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Merkkijonon haku tiedostosta (Arduino)

conjurer [07.02.2019 12:08:45]

#

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() {

}

Metabolix [07.02.2019 18:15:07]

#

Voisit silmukassa lukea tiedostosta rivin kerrallaan (readStringUntil('\n')) ja tutkia sitten, alkaako rivi halutuilla merkeillä (startsWith("52:")).

conjurer [07.02.2019 21:46:54]

#

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 !

Matti Holopainen [08.02.2019 21:47:21]

#

Tämä on jälleen hieno esimerkki siitä, että tällä sivustolla autetaan kaikkia osaamistasosta riippumatta. Ja jopa yhdellä lauseella!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta