Вопрос по работе с файлами в с++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by freddi, 10 Jan 2007.

  1. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    Дан файл вида:

    слово1
    слово2
    слово3
    и тд

    Необходимо написать программу, которая берет каждое слово из файла и соединяет с другим словом, например «тест:», и выводит в файл результат:

    тест:слово1
    тест:слово2
    тест:слово3

    Сам мучился но ничего не вышло(((
    вот мой исходник(нерабочий, создан для 2 строчек в файле) поправьте что не так, или напишите свой вариант решения данной задачи(под ДОС, не на визуале!!!).

    Code:
    #include <iostream.h> 
    #include <fstream.h>
    #include <string.h>
    void main()
    
    {
       ofstream book_file("123.txt");
       ifstream input_file("123.txt");
       char one[64], two[64], stroka1 [128];
       input_file.getline(one, sizeof(one)) ;
       input_file.getline(two, sizeof(two));
       cout << one << endl;
       cout << two << endl;
       cout<<"vvedite slovo: ";
       cin.getline(stroka1,64);
       book_file<< strcat(stroka1 ,one)<<strcat(stroka1 ,two);
    }
     
  2. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    ну добавь в свой исходник цикл и всё..
     
  3. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    через fgets() сделай все просто...
     
    #3 nc.STRIEM, 10 Jan 2007
    Last edited: 10 Jan 2007
  4. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    Мой код неработает, я знаю что нужно сделать цикл чтоб было для всех строк, но код неправельный.

    2 nc.STRIEM
    Я не силен в си, мож ты напишешь пример или кто-нибудь хотябы))
     
    #4 freddi, 10 Jan 2007
    Last edited: 11 Jan 2007
  5. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    Code:
    #include <string>
    #include <vector>
    #include <fstream>
    #include <sstream>
    #include <functional>
    #include <algorithm>
    
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	std::vector<std::string> buf;
    	{
    		std::ifstream f("123.txt");
    		std::copy(std::istream_iterator<std::string>(f),std::istream_iterator<std::string>(),std::back_inserter(buf));
    	}
    
    	std::ofstream f("123.txt");
    	std::transform(buf.begin(),buf.end(),
    		std::ostream_iterator<std::string>(f, "\n"),
    		std::bind1st(std::plus<std::string>(), "тест:")
    		);
    
    	return 0;
    }
    
     
    #5 sni4ok, 11 Jan 2007
    Last edited: 11 Jan 2007
  6. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    2 sni4ok

    1) Неработает)))
    2) Мне кажется можно сделать гараздо проще. Ты там слишком все накрутил по-моему.
     
  7. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    всё работает, обьясняю по пунктам
    создай файл 123.txt, напиши в него
    слово1
    слово2
    слово3
    сохрани, закрой, проверь что запускаешь из тойже дириктории(можешь кстати пути на жёсткую ссылку сделать, типа c:\123.txt, вообщем запускаешь эту бадягу, после выполнения в том же файле будет следующее:
    тест:слово1
    тест:слово2
    тест:слово3

    к вопросу насчёт того что накрутил- ты не прав, у меня вызывается 2 стандартных алгоритма.. куда может быть проще?
     
  8. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    Компилю я в Borland C++ и он мне выдает 7 ошибок:
    6 из которых ссылаются на то что не может открыть инклудовские файлы и еще ошибка в
    using namespace std;
     
  9. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    ну значит компилятор у тя древний, поставь последнюю версию...
    кто же виноват, что у тя компилятор самые основные вещи не поддерживает?
    з.ы - единственное место в приведённом коде не соотвествующие стандарту- это название функции для точки входа, если её заменить например на
    int main(int, char**), то приведённый код будет 100% коретным в любом плюсовом компиляторе, поддерживающим хотябы стандарт 98 года.
     
  10. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    Нда уж....
    От компилятора здесь ничего не зависит.

    Вопрос остался открытым.
     
  11. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    итак ты говорил
    считаем колличество инклудов

    Code:
    #include <string>
    #include <vector>
    #include <fstream>
    #include <sstream>
    #include <functional>
    #include <algorithm>
    
    и вправду их 6, заметь, что если ни один инклуд не подгрузится то и std нэймспэйсу неоткуда будет взяться,
    курим стандарт, а именно главу 17.4.1.2 Headers, в ней смотрим на таблицу под названием "Table 11—C++ Library Headers"

    Code:
    <algorithm> <iomanip> <list> <queue> <streambuf>
    <bitset> <ios> <locale> <set> <string>
    <complex> <iosfwd> <map> <sstream> <typeinfo>
    <deque> <iostream> <memory> <stack> <utility>
    <exception> <istream> <new> <stdexcept> <valarray>
    <fstream> <iterator> <numeric> <strstream> <vector>
    <functional> <limits> <ostream> ________________________________________________________________________
    
    видим, что все 6 вышеуказанных хедеров есть в этом списке, "-" тебе за твёрдолобость.
     
  12. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    виноват ты, потому что несешь бред полный.
    using namespace std никогда не скомпилиурется без хидеров, а они у него не подключены
     
  13. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    в приведённом мной коде были инклуды, будь внимательнее.
     
  14. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    будь внимательнее ты. они у него не инклудятся
     
  15. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    этот код будет работать под Mv6 но не под билдером!
     
    1 person likes this.
  16. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    мой вариант:

    Code:
    #include <stdio.h>
    #include <fstream>
    using namespace std;
    void main(void)
    {
    	FILE *f;
    	f=fopen("1.txt","r");
    	ofstream ofs("2.txt");
    	char byf[128],w[]="слово:";
        int i=0;
    
        while(1)
    	{
            byf[i]=fgetc(f);
    		if(byf[i]==EOF)
    		    break;
    		if(byf[i]=='\n')
    		{
    		  ofs<<w;
    		  for(int j=0;j<i;j++)
                  ofs<<byf[j];
    		  ofs<<endl;
    		  i=0;
    		  continue;
    		}
    		
    		i++;
    	}
      	
    }
    
     
  17. freddi

    freddi Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    2 nc.STRIEM

    Огромное спасибо, все работает.

    Только
    using namespace std;
    лишнее)))
     
  18. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    а по твоему ofstream где сидит?
     
  19. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    что такое mv6?

    приведённый мой код будет как минимум работать под msvc7.0 и выше, gcc, cometau, intel ну и думаю большинство других.
     
  20. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Ничуть. Это стандарт. По стандарту все, что ты подключаешь через <fstream>, <iostream> и прочие находится в пространстве имен std.
    Так что либо пиши std::eek:fstream output_file;, либо пиши в начале using namespace std.