Cześć, nowe zadanie od wykładowcy nad którym siedze pare dni :x Program wczytuje z pliku dane i zapisuje je w nowym pliku sformatowane. Mam zrobione tylko się przyczepił, że podejrzałem ilość wierszy w pliku tekstowym i na sztywno tablice ustawiłem :v Robiłem kilka podejść do tego tematu, mam metodę liczącą ile wierszy jest w pliku, ale jak podstawiam pod tablice struktur pole prywatne z licznikiem wierszy, to wszystko się sypie. Może ktoś ma pomysł jak to rozwiązać :P Kod zrobiony na razie tak, żeby po prostu działało
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
struct linia
{
int ilosc;
double cena;
string nazwa;
};
class Plik
{
private:
fstream p,f;
linia l[5];
string np;
int licznikwierszy;
public:
Plik();
void wczytaj();
void wyswietl() const;
void formatuj();
void najdluzszy();
void zamknijplik();
int ilewierszy();
};
int main()
{
Plik a;
a.ilewierszy();
a.wczytaj();
a.wyswietl();
a.formatuj();
a.zamknijplik();
a.najdluzszy();
system("pause");
return 0;
}
Plik::Plik()
{
licznikwierszy = 0;
}
int Plik::ilewierszy()
{
string wiersz;
while (p.good())
{
getline(p, wiersz);
licznikwierszy++;
}
return licznikwierszy;
}
void Plik::wczytaj()
{
cout << "Podaj nazwe pliku\n";
cin >> np;
p.open(np.c_str(), ios::in);
if (p.good() == 1)
cout << "Plik otwarty\n";
else
cout << "Wystapil blad\n";
for (int i = 0; i < 5; i++)
{
p >> l[i].ilosc >> l[i].cena;
getline(p, l[i].nazwa);
}
cout << "Dane wczytane\n";
}
void Plik::wyswietl() const
{
for (int i = 0; i < 5; i++)
cout << l[i].ilosc << " " << l[i].cena << " " << l[i].nazwa << endl;
}
void Plik::formatuj()
{
f.open("ladnie.txt", ios::out);
int licznik = 1, suma=0;
double irc;
for (int i = 0; i < 5; i++)
{
irc = l[i].ilosc*l[i].cena;
f << setw(1) << licznik << "." << setw(17) << setfill('.') << left << l[i].nazwa << setw(20) << right << l[i].ilosc << setfill(' ') << setw(2) << "x" << setw(7) << l[i].cena << " zl" << setw(20) << irc << " zl\n";
suma += irc;
licznik++;
}
f << setfill('-') << setw(80) << '-' << endl << setw(67) << setfill(' ') << "Razem: " << suma << " zl" << endl;
cout << "Plik sformatowany\n";
f.close();
}
void Plik::najdluzszy()
{
p.open(np, ios::in);
string wiersz[5];
for (int i = 0; i < 5; i++)
{
getline(p, wiersz[i]);
}
p.close();
string najdluzszy;
for (int i = 0; i < 5; i++)
{
if (wiersz[i].length() > wiersz[i - 1].length())
najdluzszy = wiersz[i];
}
cout << "Najdluzszy wiersz:" << endl << najdluzszy << endl << "Ilosc znakow: " << najdluzszy.length() << endl;
}
void Plik::zamknijplik()
{
p.close();
}