Ich versuche, das Textformat einer Textdatei mit C zu ändern. Folgendes ist der Code, den ich ausprobiert habe. Das Problem mit der Ausgabe ist, dass der Code jede zweite Zeile der Textdatei überspringt.alternative Zeilen während der E/A in C gedruckt
Folgendes ist die Datei, die ich versuche zu formatieren.
Protein
26709
1MET N 1 1.826 3.097 3.556 -0.457 0.365 -0.163
1MET H 2 1.769 3.168 3.512 -0.606 -0.305 -1.071
1MET H2 3 1.781 3.006 3.565 0.271 0.041 0.264
1MET H3 4 1.857 3.125 3.649 1.251 -2.295 0.144
1MET CA 5 1.948 3.077 3.475 -0.538 -0.282 -0.098
1MET HA 6 1.987 2.977 3.504 -2.137 -0.912 -0.071
1MET CB 7 1.914 3.075 3.321 0.389 -0.161 -0.089
1MET HB2 8 1.848 2.987 3.306 -0.909 0.569 1.297
1MET HB3 9 1.869 3.176 3.311 -1.707 -1.073 -0.224
1MET CG 10 2.034 3.050 3.220 0.171 0.344 -0.271
Und ich bekomme die Ausgabe als:
Protein
26709
1MET H 2 1.769 3.168 3.512 -0.606 -0.305 -1.071
1MET H3 4 1.857 3.125 3.649 1.251 -2.295 0.144
1MET HA 6 1.987 2.977 3.504 -2.137 -0.912 -0.071
1MET HB2 8 1.848 2.987 3.306 -0.909 0.569 1.297
1MET CG 10 2.034 3.050 3.220 0.171 0.344 -0.271
1MET HG3 12 2.017 2.974 3.140 2.388 1.184 -1.570
1MET CE 14 2.245 3.113 3.036 0.088 -0.370 0.744
1MET HE2 16 2.311 3.190 2.990 -0.737 -0.490 -0.665
1MET C 18 2.043 3.195 3.504 -0.052 -0.237 -0.714
Im Folgenden finden Sie den Code, die ich versucht habe:
#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
FILE *fp;
char buff[200],res[10],atm[10],atmNum[10],x[10],y[10],z[10],vx[10],vy[10],vz[10];
if (argc<2){
printf("SYTEM ABORT ! \n Provide the input GRO file");
exit(1);
}
else
fp=fopen(argv[1],"r");
while(fgets(buff,200,fp)!=NULL){
if (strlen(buff) > 10) {
fscanf(fp,"%s %s %s %s %s %s %s %s %s",res,atm,atmNum,x,y,z,vx,vy,vz);
if (strcmp(atm,"Na")){
printf("%7s %7s %5s %7s %7s %7s %7s %7s %7s",res,atm,atmNum,x,y,z,vx,vy,vz);
}
else
printf("%8s %7s %5s %7s %7s %7s %7s %7s %7s",res,atm,atmNum,x,y,z,vx,vy,vz);
}
else
printf("%s",buff);
}
fclose(fp);
return 0;
}
Da es die erste Zeile aus der Ausgabedatei ist zu sehen ist übersprungen, ich denke, das ist aufgrund der Verwendung von fgets
in while
Schleife. Aber danach druckt es alle abwechselnden Zeilen.
Im positiven (length> 10) Fall Ihres 'if'-Blocks bin ich mir ziemlich sicher, dass Sie' sscanf' und den Puffer, den Sie gerade mit 'fgets' gezogen haben, als Datenquelle verwenden und nicht werfen es aus und mit 'fscanf', um die nächste Zeile zu bekommen. Ehrlich gesagt, sollten Sie auch das Ergebnis Ihres 'scanf' überprüfen, um sicherzustellen, dass alle Parameter, die Sie verwenden, tatsächlich gefüllt sind. Nimm nichts an. Annahme ist die Mutter aller ... – WhozCraig
@WhozCraig Vielen Dank, das war eine einfache Lösung. – PythonNoob