Ho scaricato i file e, come ti avevo detto sin dall'inizio, hanno un formato particolare, ovvero le linee "vuote" sono in realtà piene di spazi (avresti dovuto saperlo e dirlo prima ...)
Il file ha un formato fisso e non libero come avevi indicato facendomi copiare il testo in un post.
Non a caso dico di postare il file dati, proprio perché so che, nella maggior parte dei casi, agire con altri file è una perdita di tempo.
Comunque, se modifichi il codice tenendo conto delle linee piene di spazi, hai l'output corretto - ovviamente - con tutti gli spazi in una linea. I dati dovrai estrarli tu pensando al codice opportuno.
int main()
{
FILE *fp = fopen("file.txt", "r");
if (!fp)
{
puts("Errore apertura file dati\n");
return -1;
}
bool fnd = false;
int erow = 0;
char *curr;
char tmpstr[MAXSTR];
while (fgets(tmpstr, MAXSTR, fp))
{
curr=tmpstr;
if(strstr(tmpstr, "Table: Load Pattern")) fnd = true;
if(fnd)
{
while(*curr == 32) curr++;
if(*curr == 10) erow++; else erow = 0;
if (erow == 2) fnd = false;
}
if (fnd && *curr != 10) printf("%s", tmpstr);
}
fclose(fp);
return 0;
}
Se non tieni conto della riga del nome della tabella e di tutta la testata ma solo dei record dati allora il codice è semplificabile, in questo modo
int main()
{
FILE *fp = fopen("file.txt", "r");
if (!fp)
{
puts("Errore apertura file dati\n");
return -1;
}
int fnd = 0;
char tmpstr[MAXSTR];
while (fgets(tmpstr, MAXSTR, fp))
{
if(fnd==0)
if(strstr(tmpstr, "Table: Load Pattern")) fnd = 1;
if(fnd==2)
{
char *curr=tmpstr;
while(*curr == 32) curr++;
if(*curr == 10) break;
printf("%s", tmpstr);
}
if(fnd==1)
{
for(int i=0; i<3; i++)
fgets(tmpstr, MAXSTR, fp);
fnd=2;
}
}
fclose(fp);
return 0;
}