Originariamente inviato da lolide
In C++ quindi usi gli fstream ?
hai provato ad andare alla fine del file con fseek o seekg e andare indietro contando il numero di '\n' che trovi ?
Riesco ad estrapolare le ultime righe volute con questo cod (del mitico oregon se non erro...):
Es. le ultime 500 righe le estrapolo così:
codice:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define LINEE 500
int main()
{
ifstream f;
f.open("ESTRAZIONI-BARI.txt", ios::binary);
int ri=0;
f.seekg(-1, ios::end);
char c;
f.get(c);
//APRO FILE CON LE ULTIME RIGHE CHE INTERESSANO
ofstream fout;
fout.open("ESTRAZIONI-BARI-ULTIME-500.txt");
//---------------------------------------------
while(ri<LINEE)
{
if(c=='\n') ri++;
f.seekg(-2, ios::cur);
if(f.fail())
{
f.clear();
f.seekg(0, ios::beg);
break;
}
f.get(c);
}
string line;
getline(f, line);
getline(f, line);
while(!f.fail())
{
//scrivo su file ogni linea rilevata
fout << line;
fout << "\n";
//----------------------------------
cout << line << endl;
getline(f, line);
//cin.get();
}
f.close();
//return 0;
}
Ora però come ho scritto nel primo post avrei necessità di estrapolare le 520 ultime righe togliendo le ultime 20... il tutto in automatico (come posso togliere le ultime 20?)
E se possibile alla fine scomporre in 5 file distinti le diverse 5 "colonne" formate dai numeri intervallati da virgola...
es:
alla fine dei giochi...
il file contenente le righe...
a,b,c,d,e
f,g,h,i,l,
sarà scomposto in...
file1.txt contiene a e f
file2.txt contiene b e g
file3.txt contiene c e h
file4.txt contiene d e i
file5.txt contiene e e l
Grazie agli/alle esperti/e come lolide, oregon ecc...