En löytänyt oppaita tätä varten, mutta miten voin etsiä toisesta tiedostosta muuttujat ja katsoa onko kaksi muuttujaa samallaisia?
Eli pitäisi saada main.cpp tiedostoon väliaikaisesti sanat.cpp. Asian toteutan nyt niin, että on muuttuja "sana" ja kun kirjoitetaan jotain ja painetaan entteriä avataan funktio sana_tarkastus, nyt tuonne pitäisi saada includetettua tuo sanat.cpp jotta se voisi tarkistaa, mutta ei onnistu. Se valittaa, ette tiedä mikä on sana muuttuja ja ei varmaan tiedäkkään, kun kyseessä on kaksi eri tiedostoa.
Sitten se, että miten saan helposti tarkistettua 20 erinimistä muuttujaa, että onko samallaisia?
Jos ei ole pitäisi sana.cpp:hen lisätä uusi koodi rivi automaattisesti jossa on tämä uusi sana. menee vaikeaksi? Toivon, että autatte. Ja kiitos jos autatte. :O
Katos noista.
https://www.ohjelmointiputka.net/koodivinkit/
https://www.ohjelmointiputka.net/koodivinkit/
Edit, siis jos sitä tiedostoa pitää pystyä muokaan, niin teet ihan perus tiedostonkäsittelyllä (fstream) jonkin tekstitiedoston missä on vaikka joka rivillä yksi sana ja sitten tarkistat onko ohjelmassa kyseistä sanaa. Jos taas lista on staattinen, niin silloin voit noiden kahden linkin avulla liittää sen sanat.cpp tiedoston projektiisi.
Ja monen muuttujan vertailuun vastauksena, taulukot ja for looppi.
Taitaa staattinen olla parhain, koska sanoja on kielteisiä möynteisiä, kysymyksiä jne. Eli laitan vain sanat esimerkiksi:
string tervehdys_1="Moi";
string tervehdys_2="Terve";
string tervehdys_3="Heippa";
string kysymys_1="Mitä kuuluu?";
no miten sitten onnistuu, jos sanaa ei löydykkään ja se lisätään vaikka tervehdys_4 nimellä tiedostoon? Miten saan sen automaattisesti hoitamaan tuon?
Jos teet tyyliin #include "xxxxx" niin et voi lisätä sinne yhtään mitään ohjelman käännön jälkeen.
ELI OPETTELE SITÄ TIEDOSTONHALLINTAA!!!!
no kerrotkos sitten sen verran vielä, että pitää käyttää siis esim sana.dat tiedostoja ja etsiä sieltä jostain riviltä sana?
Ei tuollaiseen mitään opasta olisi suomeksi, kun google löysi vain enklanniksi. :/
Tuossa ohjelma joka lukee tekstitiedostosta sanoja ja vertaa niitä annettuun sanaan, saat itse tehdä kirjoituksen...
#include <iostream> #include <vector> #include <string> #include <fstream> std::vector<std::string> lueTiedosto(std::string fileName); int main() { //Luodaan vectori std::vector<std::string> sanat; //sana mitä etsitään std::string sana = "lol"; sanat = lueTiedosto("tiedosto.dat"); //Jos onnistui if(sanat.size()) { for(unsigned short int i = 0; i < sanat.size(); i++) { if(sanat[i] == sana) std::cout<<"Löytyi riviltä: "<<i+1<<std::endl; } } std::cin.get(); return 0; } std::vector<std::string> lueTiedosto(std::string fileName) { //Luodaan vectori joka palautetaan std::vector<std::string> sanat; //Temp string std::string tmp; std::cout<<"Luetaan tiedostoa: "<<fileName<<"..."<<std::endl; //Avataan tiedosto std::ifstream fin; fin.open(fileName.c_str()); //Jos onnistui if(fin) { //Loopataan kunnes tiedosto loppuu while(!fin.eof()) { //Luetaan tiedostosta rivi std::getline(fin, tmp); //ja tallennetaan se vectoriin sanat.push_back(tmp); } std::cout<<"Valmis!"<<std::endl; //Suljetaan tiedosto fin.close(); } //palautetaan vectori return sanat; }
Ja vielä tiedosto.dat
omena lol asd lol testi sana joku omena lol
Hyvin toimi ainakin mulla, eli tulosti miltä riviltä löytyi sana.
Tässä on esimerkki, jossa tiedon nimi ja arvo ovat tiedostossa peräkkäisillä riveillä (joten tieto ei saa sisältää rivinvaihtoa!). Tietoja voi lisätä ja hakea muttei poistaa. (Poistaminen vaatisi, että koko tiedosto kirjoitettaisiin uusiksi poistettavasta kohdasta alkaen.) Toivottavasti luet koodin huolella ja yrität oikein kovasti ymmärtää siitä kaiken; mitään ihmeellistä siinä ei ole! Esimerkki on epäoptimaalinen ja yksinkertainen, jotta varmasti ymmärtäisit sen.
#include <fstream> const char *tiedosto = "tiedot.dat"; void lisaa(const std::string& nimi, const std::string& arvo) { // Avataan tiedosto laajentamista (append) varten. std::ofstream ofs(tiedosto, std::ios::app); // Tulostetaan kaksi riviä: nimi ja arvo. ofs << nimi << std::endl; ofs << arvo << std::endl; } bool hae(const std::string& haettava, std::string& tulos) { // Avataan tiedosto lukemista varten. std::ifstream ifs(tiedosto); // Luetaan aina nimi ja arvo. std::string nimi, arvo; while (std::getline(ifs, nimi) && std::getline(ifs, arvo)) { // Jos nimi vastaa haettavaa, tallennetaan tulos ja lopetetaan. if (nimi == haettava) { tulos = arvo; return true; } } // Ei osumaa, tallennetaan tulokseksi tyhjä ja palautetaan false. tulos = ""; return false; } #include <iostream> int main() { std::string arvo; // Jos juttu löytyy, tulostetaan se, muuten lisätään uusi juttu. if (hae("juttu", arvo)) { std::cout << "juttu: " << arvo << std::endl; } else { lisaa("juttu", "Olipa kerran mika132, joka..."); std::cout << "Kirjoitettiin uusi juttu." << std::endl; } }
kiitoksia paljon. :)
Niin tein niiden ohjeiden mukaan mitkä sain sen PDcursesin, mutta PDCurses ei edellenkään toimi.
muutin sieltä vcwin32.mak tiedostosta seuraavan kohdan:
PDCURSES_SRCDIR= ...
tähän:
C:\PDcurses
Errorit:
1>Linking...
1>pdcurses.lib(d000134.o) : warning LNK4078: multiple '.text' sections found with different attributes (E0000020)
1>World Leaders 2.obj : error LNK2001: unresolved external symbol _stdscr
1>C:\Documents and Settings\Mika.KOTI-8FEC3C6EF1\Omat tiedostot\Visual Studio 2008\Projects\World Leaders 2\Debug\World Leaders 2.exe : fatal error LNK1120: 1 unresolved externals
Hmm toi mun juttu tais olla vähän liian monimutkainen aloittelijalle... :P
Juu, mutta hokasin pää perjaatteen, kun luin kummankin, mutta projekti on seisaallaan niin kauan, kun joku tai keksin mikä tuota PDCursesia riivaa. 2vrk jo kulunut siihen, kun olen sitä miettinyt ja kysellyt täällä.
Jos SQL on tuttu, tähän voisi olla kätevä vaikkapa SQLite. Näin olisi varsin helppoa lisäillä, poistaa ja muokata sanoja.
Toimiiko se täysin samalla tavalla kuin normaali SQL, nimittäin olen SQL:ää 2 vuotta käyttänyt PHP:n kanssa.
Eiköhän kaikki SQL-kannat toimi samalla tavalla kuin "normaali SQL", tuskin niitä muuten edes kutsuttaisiin SQL:ksi.
Sinänsä "normaali SQL" on aika epäselvä käsite, mutta kaikkien käyttö kuitenkin on samanlaista, strukturoidulla kyselykielellä kyselemistä.
Kannattaa kuitenkin muistaa, että C(++) ei toimi samalla tavalla kuin PHP, eli myös "normaalin SQL:n" käyttö on siinä selvästi mutkikkaampaa.
Metabolix kirjoitti:
Kannattaa kuitenkin muistaa, että C(++) ei toimi samalla tavalla kuin PHP, eli myös "normaalin SQL:n" käyttö on siinä selvästi mutkikkaampaa.
Näinhän se on. Tosin täältä löydät loistavan C++-wrapperin SQLite3:lle.
Esim. katso, kuinka näppärää on ihan peruskomennon teko:
sqlite3pp::database db("test.db"); sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (?, ?)"); cmd.bind(1, "mika132"); cmd.bind(2, "1234567"); cmd.execute();
Jopa transactionit on helppoja:
sqlite3pp::transaction xct(db); { sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)"); cmd.bind(":user", "mika132"); cmd.bind(":phone", "1234567"); cmd.execute(); } xct.rollback(); // Tai jos xct tuhotaan, niin commit. Tai ihan vain xct.commit().
Helppoa, eikö?
Aihe on jo aika vanha, joten et voi enää vastata siihen.