Van egy könyv kód, szeretnék egy olyan programot irni ami bekérné a könyvet (mondjuk pdf-ben) és a kód alapján megkeresi az adott szót majd ezt egy külön fájlban kimenti. Milyen nyelven lenne érdemes megirni? Hogy kezdjek neki?
Aki esetleg nem értené, könyv kód pl 5 14 67 367 na most a számok eggyes szavakat jelölnek
Lefelé hajlott a nap. Búcsúzóul betekintett még az erdőbe, hol hosszúra nyúlt az árnyék.Az 5=Búcsúzóul 14=árnyék és igy tovább.
Ha már adott szövegből kell a szavakhoz számokat rendelni én biztos minimum egy hashmappel, de talán inkább egy adatbázissal indulnék.
Egy ilyen állomány akkor jó, ha hosszú, ami pedig nagy memóriahasználatot generál.
Egy SQLite adatbázissal mondjuk kapásból hordozható formátumra lehet hozni a kódtáblát kényelmesen és könnyen lehet kiszűrni, vagy struktúrától függően direkt letárolni a redundanciát. (Egy szó többször szerepel -> 1 kód legyen vagy kapásból az összes?)
A nyelv igazából mindegy, mondjuk én ennek biztos nem C++-ban ugranék neki.
Inkább mondjuk Python vagy Java nyelven. Egyrészt mert ezekkel több a gyakorlatom, másrészt hordozhatóak, harmadrészt van egy halom stringkezelő függvényük és beolvasási módjuk. (Ebben a Python az igazi bajnok.)
Érdemes nagyban gondolkodni.
Tekintve, hogy ha mondjuk ezt a kérdező valamilyen "titkosításhoz" is akarja használni, akkor mindenképpen nyerő egy adatbázis. :)
A próblémám megoldva!!
#include <fstream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
ifstream ifsNumbers("numbers.txt");
ifstream ifsText("text.txt");
ofstream ofs("words.txt");
vector<int> vNumbers( istream_iterator<int>(ifsNumbers), (istream_iterator<int>()) );
sort(vNumbers.begin(), vNumbers.end());
int cnt = 0;
auto cit = vNumbers.cbegin();
copy_if( istream_iterator<string>(ifsText), istream_iterator<string>(), ostream_iterator<string>(ofs, "\n"), [&] (const string&)
{
if (cit != vNumbers.cend() && cnt++ == *cit)
{
cit++;
return true;
}
else
{
return false;
}
});
ifsNumbers.close();
ifsText.close();
ofs.close();
return 0;
}
Ahol az exe van, ott kell lennie egy numbers.txt fájlnak, ami a számokat tartalmazza tetszőleges 'whitespace'-ekkel elválasztva (tab, sima szóköz, új sor..)
pl.:
numbers.txt:
0 13
Valamint egy
text.txt, amiben a feldolgozandó szöveg található.
Lefelé hajlott a nap. Búcsúzóul betekintett még az erdőbe, hol hosszúra nyúlt az árnyék.
Az eredmény a words.txt fájlban lesz megtalálható.
Jelen példákra:
Búcsúzóul
árnyék.
Php-ban kb:
<?php
$words = {5,14,67,367};
$content = file("textfile.txt");
$conArray = explode(" ",$content);
foreach($words as $value) print $conarray[$value + 1]."\n";
?>
:)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!