як бы адзін ісці аб пошуку канкрэтных слоў у тэкставым файле ў C ++

як бы я гэта зрабіць:

Ёсць тэкставы файл з імем directorycontents.txt у гэтым directorycontents.txt ёсць куча тэксту кожнай з якіх з'яўляецца імем файла з пашырэннем імя файла я хачу, каб быць у стане ісці, як гэта, калі ёсць пашырэнне імя файла адмысловых знакаў, такія як .txt або .png затым зрабіць fprintf (STDERR, "whateva");

я паглядзеў на IStream і fstream і iostream, але ім не вельмі бераг, як выкарыстоўваць fstream, каб зрабіць гэта

дзякуй

5
Ці можаце вы прывесці прыклад? Частка з «.png .bat» мяне збянтэжыла?
дададзена аўтар Kiril Kirov, крыніца
якія рэчы я павінен шукаць, каб зрабіць гэта?
дададзена аўтар NoobScratcher, крыніца
ёсць тэкставы файл з імем directorycontents.txt у гэтым directorycontents.txt ёсць куча тэксту кожнай з якіх з'яўляецца імем файла з пашырэннем імя файла я хачу, каб быць у стане ісці, як гэта, калі ёсць пашырэнне імя файла адмысловых знакаў, такія як .txt або .png, то зрабіць гэта :)
дададзена аўтар NoobScratcher, крыніца
Вам трэба адкрыйце Гэта прачытаць ўтрыманне і пошук для ключавых слоў, якія вы шукаеце.
дададзена аўтар Alok Save, крыніца
На самай справе чытаць добрую кнігу і чытаць больш на Input/Output Handling
дададзена аўтар Alok Save, крыніца
Ці сапраўды гэта павінна быць C ++? Вы лічыце скрыптовыя мовы?
дададзена аўтар Matt, крыніца

2 адказы

Добра, я проста паказаць вам на правільным кірунку, і я не буду размяшчаць код, як вам трэба, каб паспрабаваць яго самастойна.

Перш за ўсё, прачытаць пра чытанне файлаў у C ++. Вы можаце Google гэта і ёсць тоны інфармацыі аб гэтым. Вы можаце паспрабаваць «як чытаць тэкставы файл у C ++», да прыкладу.

Па-другое, аддаюць перавагу выкарыстоўваць ofstream і/або ifstream - гэта C ++ спосаб зрабіць гэта.

Then parse the file - you can read it word by word (using istream::operator>> ) , line by line (for example with getline ) into std::string (as you're talking about file names).

А потым аналізуе ўвод - аналізуюць аналізуемы файл і пошук канкрэтных слоў у ім - напрыклад, станд :: радок мае функцыі-членаў, такія як знайсці - Я думаю, што гэта будзе дастаткова для вашай праблемы :)

Я спадзяюся, што дапамагае. Адразу адзначым, што мы не пішам код тут, мы проста дапамагаем знайсці вырашэння праблем.

3
дададзена
Вельмі ветлівы і павучальны адказ. +1
дададзена аўтар Didier Trosset, крыніца
@NoobScratcher: Калі вы "не ведаеце, як чытаць», то, магчыма, вы павінны паспрабаваць даведацца гэта першы. ;-)
дададзена аўтар Didier Trosset, крыніца
Ніхто не вырашыць вашу праблему для вас. І ніхто не будзе пісаць код для вас тут. Атрымаць кнігу або папрасіць дзе-небудзь яшчэ. Калі вы размяшчае (у іншым пытанні) какой-то код, які вы спрабавалі напісаць, мы можам дапамагчы. У адваротным выпадку - не.
дададзена аўтар Kiril Kirov, крыніца
@NoobScratcher - ты на тым месцы, прабачце.
дададзена аўтар Kiril Kirov, крыніца
Мне патрэбен код вось мая праблема, я не ведаю, як чытаць дакументацыю і паўтарыць тое, што там просяць без яго не працуе ці быць дзіўным і дзіўным, і я ненавіджу, калі па-сапраўднаму думаць пра тое, як гэта зрабіць, калі ён павінен быць там Infront ад майго асобы для мяне таксама гэта разумеюць і добра тлумачацца
дададзена аўтар NoobScratcher, крыніца
вось праблема я не хачу, каб зрабіць усё, што для адной функцыі і для любой іншай функцыі, якая прыйдзе пасля таго, што яго больш намаганняў і я ненавіджу дрэнныя эмоцыі
дададзена аўтар NoobScratcher, крыніца

Для чаго-то накшталт гэтага, безумоўна, паглядзіце на станд :: fstreams . Зыходзячы з вашага выцвілай апісання таго, што вы спрабуеце зрабіць, вы можаце выкарыстоўваць гэтую простую праграму ў якасці адпраўной кропкі:

#include 
#include 
#include 
using namespace std;

void doSomething();
int main(int argc, char *argv[])
{
  if(argc < 2)
  {
    cout << "Usage: findsomething [filename]" << endl;
    return 1;
  }

  ifstream infile(argv[1], ifstream::in);
  if(!infile.is_open())
  {
    cout << "Couldn't open file " << argv[1] << endl;
    return 1;
  }

  string line;
  while(getline(infile, line))
  {
    if(line.find(".txt") != string::npos ||
       line.find(".png") != string::npos ||
       line.find(".bat") != string::npos)
    {
      doSomething();
    }
  }
}

Будзем спадзявацца, што дастаткова кода, каб вы пачалі, і гэта не занадта цяжка для вас, каб чытаць.

0
дададзена
Psst, не рабіце гэтага, калі ласка.
дададзена аўтар Kiril Kirov, крыніца