С++.Работа с файлами. Текстовый файл.

  • Автор темы Guest
  • Дата начала
G

Guest

#1
С использованием классов обязательно .Имеется текстовый файл. Напечатать.
а)его первую строчку.
б)его пятую строчку.
в)его первые пять строк.
г)его строки с s1 по s2.
д)весь файл.

работу с файлами вообще не одупляю. Просьба кто может напишите простую и понятную прогу хоть под а) дальше думаю по подобию разберусь.
 
R

Rififi

#2
C++:
#include <string>
#include <algorithm>
#include <functional>
#include <locale>

#include <iostream>
#include <fstream>
#include <iterator>
#include <sstream>

/*
С использованием классов обязательно .Имеется текстовый файл. Напечатать.
а)его первую строчку.
б)его пятую строчку.
в)его первые пять строк.
г)его строки с s1 по s2.
д)весь файл.
*/

struct file_printer
{
file_printer(std::istream& is) : is_(is) {}

void print(size_t from, size_t length) const
{
is_.seekg(0, std::ios_base::beg);

std::string s;
for (size_t i=0; i<from; i++)
if (!std::getline(is_, s))
return;

size_t i = 0;
do 
{
std::cout << "Line #" << (i+1) << ": " << s << std::endl;
i++;
} while (i < length && std::getline(is_, s));

std::cout << std::endl;
}

std::istream& is_;
};

int main()
{
setlocale(LC_ALL, "");

std::ifstream ifs("lines.txt");
if (!ifs)
return 0;

const file_printer fp(ifs);

fp.print(1, 1);
fp.print(5, 1);

fp.print(1, 5);

const size_t s1 = 6;
const size_t count = 4;
fp.print(s1, count);

return 0;
}
программа читает строки из файла lines.txt
если в нём содержится, например, это:

строка 1
строка 2
строка 3
строка 4
строка 5
строка 6
строка 7
строка 8
строка 9
строка 10
строка 11


то вывод будет таким:

Код:
Line #1: строка 1

Line #1: строка 5

Line #1: строка 1
Line #2: строка 2
Line #3: строка 3
Line #4: строка 4
Line #5: строка 5

Line #1: строка 6
Line #2: строка 7
Line #3: строка 8
Line #4: строка 9
 
G

Guest

#4
Но если честн отедьные строки понятны отдельные нет.
Общими силами написали программу но почему то выскакивают ошибки в Майкрософт Вижуал

Не подскажете уважаемый Rififi что не так B)

// 15.16.cpp: определяет точку входа для консольного приложения.
//

Код:
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#define n 10;
using namespace std;
class file
{public:
void open()
{char s[n];
int i;
ifstream f;
f.open("D:\\15.16\\temp.txt");
if(f);
for(i=0;i<n;i++)
{f>>s[i];}
{
cout<<"a)"<<endl;
cout<<s[0]<<endl;
}

{
cout<<"b)"<<endl;
cout<<s[4]<<endl;
}

{
cout<<"v)"<<endl;
for(i=0;i<5;i++)
{
cout<<s[i]<<endl;
}
}

{
cout<<"g)"<<endl;
cout<<"Vvedite c kakoj stroki pe4atat S1=";
int s1;
cin>>s1;
cout<<endl;

cout<<"Vvedite do kakoj stroki pe4atat S2=";
int s2;
cin>>s2;
cout<<endl;


for(s1;s1<s1;s1++)
{
cout<<s[s1]<<endl;
}
}

{
cout<<"d)"<<endl;
for(i=0;i<n;i++)
{
cout<<s[i]<<endl;
}
}
f.close();
}

}st;


int _tmain(int argc, _TCHAR* argv[])
{
st.open;
system("PAUSE");
return 0;
}
 
R

Rififi

#5
АМ101

твоя прога слишком помойно оформлена, глаза прямо ломает, и рука сама ищет кнопку DEL
Приведи её в божеский вид, как у меня в посте.
 
R

Rififi

#7
АМ101

#define n 10;

точку с запятой ставить нельзя

if(f);
for(i=0;i<n;i++)

оператор if ничего не делает

for(s1;s1<s1;s1++)

условие в цикле бредовое

это что сразу заметно.

ну и самое главное - прога в корне неверна, поскольку по заданию нужно считывать строки, а вот здесь у тебя читаются символы:

{f>>s;}
 
G

Guest

#9
у менятакое ошущение что ошибка идентификатор string :ya_lamo: , не подсвечивается синим как int или char , а горит черным. Может его надо заменить другим типом ? или string не может быть массивом?

C++:
// 15.15ы.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#define n 10
using namespace std;
class file
{public:
void open()
{string s[n]; /*у менятакое ошущение что ошибка тут вопрос идентификатор string не подсвечивается синим как int или char , а горит черным. Может его надо заменить другим типом ? или string не может быть массивом??????*/
int i;
ifstream f;
f.open("D:\\15.16\\temp.txt");
//if(f);
//for(i=0;i<n;i++)
//{f>>s[i];}
{
cout<<"a)"<<endl;
cout<<s[0]<<endl;
}

{
cout<<"b)"<<endl;
cout<<s[4]<<endl;
}

{
cout<<"v)"<<endl;
for(i=0;i<5;i++)
{
cout<<s[i]<<endl;
}
}

{
cout<<"g)"<<endl;
cout<<"Vvedite c kakoj stroki pe4atat S1=";
int s1;
cin>>s1;
cout<<endl;

cout<<"Vvedite do kakoj stroki pe4atat S2=";
int s2;
cin>>s2;
cout<<endl;


for(int i=s1;i<s2;s1++)
{
cout<<s[s1]<<endl;
}
}

{
cout<<"d)"<<endl;
for(i=0;i<n;i++)
{
cout<<s[i]<<endl;
}
}
f.close();
}

}st;


int _tmain(int argc, _TCHAR* argv[])
{
st.open;
system("PAUSE");
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}