Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » text auf stichwort durchsuchen...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
15.09.2004, 21:23 Uhr
tanne



ja, die überschrift sagt mein prob ja schon

ich möchte eine textdatei auf ein/mehrer schlüsselwort/-wörter durchsuchen, un dann diese in einen ordner mit dem nachem des schlüsselworts kopieren....
(sin ziemlich viele dateien, die ich halt so erstma grob vorsortieren möchte)

meine c++ kentnisse reichen dafür jedoch leider nicht komplett aus...

deshalb bräucht ich ein wenig hilfe...möchte natürlich kein komplette sourcecode...

nur zB. wie ich ein text durchscuhe, ordner erstellen, verschieben von datein....

schonma danke im vorraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.09.2004, 22:00 Uhr
virtual
Sexiest Bit alive
(Operator)


Also zunächstmal ists so, daß Man mit ANSI C++ keine Ordner erstellen kann, das wäre eine Betriebssystemabh. Sache.

Ansonsten würde ichs etwa so machen:

Eingabe:
Eingeben werden 1-N Schlüsselworte (ohne Leerzeichen)

Verarbeitung:
1. Datei komplett einlesen
2. Alle Satzzeichen durch whitespace ersetzen (läßt sich mit (1) mit std::transform kombinieren) -> wandert in einern stringstream
3. Stringstream wortweise einlesen. (Total easy)
4. Wenn ein eingelesenes Wort ein Schlüsselwort matcht, irgend einen Counter erhöhen
5. Entspechend der Counter/schlüsselwörter kopieren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.09.2004, 22:03 Uhr
tanne



ok vielen danke schonma...hab zwar nur die hälfte davon verstanden
kannste das vielleicht nochma bissi genauer erklären, wär echt net...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.09.2004, 23:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
bietet std::string nicht sowas wie find?...
also einfach

C++:
std::string temp,file;
std::ifstream ifs(...);
while(std::getline(temp,ifs))file+=temp;

//in file rumsuchen...


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.09.2004, 00:08 Uhr
typecast
aka loddab
(Operator)


Jau. Es gibt eine find Methode. Der Code dafuer ungefaehr so aussehen (ungetestet)


C++:
std::string line;
std::string schluesselwort="was_weiss_ich";
std::ifstream f("dateiname.txt");
int lineCount = 1;
while (std::getline(line, f)) {
   int pos=line.find(schluesselwort); // ohne positionsangabe wird von der position 0 an gesucht
   if (pos != -1) {
      std::cout << "Wort gefunden in Zeile " << lineCount << " an Position " << pos << std::endl;
   }
   ++lineCount;
}


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.09.2004, 03:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@typecast...
ja das das so geht war mir schon klar... mich hat mal eher daran interessiert warum man das nicht so machen sollte. Ich geh mal davon aus das virtual diese Methode bekannt ist und im allgemeinen (so jedenfalls meine Erfahrung) empfiehlt er nicht was komplizierteres weil ihm gerade so langeweilig ist...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.09.2004, 07:05 Uhr
tanne



danke euch allen schonma....
hab das ma so ausprobiert...aber da bekomm ich folgenden fehler:

für die zeile:
while (std::getline(line, f)) {

... 'no matching function for call to `getline(std::string&, std::ifstream&'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.09.2004, 07:56 Uhr
virtual
Sexiest Bit alive
(Operator)


Es kommt auf die genaue Aufgabenstellung an, denke ich. Wenn ein Schlüsselwort wirklich ein Wort ist (und davon bin ich ausgegangen), dann bringt find nicht viel, weil es auch Wortteile findet. Ich hätte Die suche nach Vorommnissen erstmal so gelöst:

C++:
#include <iostream>
#include <sstream>
#include <set>
#include <fstream>
#include <cctype>
#include <iterator>


// Ersetzt alles, was nicht alphanumerisch ist in blanks
char alnum_only(char c)
{
    return !isalnum(c)? ' ':c;
}

int main()
{
    std::string datei = "key.cpp";

    // Schlüsselwörter seien mal hier einfach "word" und "key"
    std::set<std::string> keywords;
    keywords.insert("word");
    keywords.insert("key");


    // Einlesen der Datei, so daß in words nur Woörter stehen, nie aber Satzzeichen
    std::ifstream in(datei.c_str());
    std::stringstream words;
    in.unsetf(std::ios_base::skipws);
    std::transform(std::istream_iterator<char>(in),
                   std::istream_iterator<char>(),
                   std::ostream_iterator<char>(words),
                   alnum_only);

    // Berechne Hitscore
    int score = 0;
    while (words)
    {
        std::string word;
        words>>word;
        if (keywords.find(word)!=keywords.end()) score++;
    }

    std::cout<<score<<" Hits in Datei "<<datei<<std::endl;
}


Dies kann man dann noch erweitern, zB zählen wie oft welches Keyword gehittet wurde. Bei großen Datenmenge ist dieser Algo allerdings nicht sehr effizient.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.09.2004, 10:42 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von tanne:
danke euch allen schonma....
hab das ma so ausprobiert...aber da bekomm ich folgenden fehler:

für die zeile:
while (std::getline(line, f)) {

... 'no matching function for call to `getline(std::string&, std::ifstream&'



Du hast f und line vertauscht: std::getline(f, line)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.09.2004, 15:25 Uhr
tanne



ok vielen dank....

also nach wörtern suchen klappt jetzt...aber wie kann ich die textdateien, dann in ordner verschieben um sie zu sortieren?!
oder is das gar nicht möglich(so leicht) ?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: