ファイルからデータを読み込んでいますorderedfile.txt
。このファイルには、次の形式のヘッダーが含まれている場合があります。
BEGIN header
Real Lattice(A) Lattice parameters(A) Cell Angles
2.4675850 0.0000000 0.0000000 a = 2.467585 alpha = 90.000000
0.0000000 30.0000000 0.0000000 b = 30.000000 beta = 90.000000
0.0000000 0.0000000 30.0000000 c = 30.000000 gamma = 90.000000
1 ! nspins
25 300 300 ! fine FFT grid along <a,b,c>
END header: data is "<a b c> pot" in units of Hartrees
1 1 1 0.042580
1 1 2 0.049331
1 1 3 0.038605
1 1 4 0.049181
また、ヘッダーが存在せず、データが最初の行から始まる場合もあります。データを読み込むための私のコードを以下に示します。データが1行目から始まる場合は機能しますが、ヘッダーが存在する場合は機能しません。これを回避する方法はありますか?
int readinputfile() {
FILE *potential = fopen("orderedfile.txt", "r");
for (i=0; i<size; i++) {
fscanf(potential, "%lf %lf %*f %lf", &x[i], &y[i], &V[i]);
}
fclose(potential);
}
次のコードは、fgets()を使用して各行を読み取ります。各行について、sscanf()を使用して文字列をスキャンし、double変数に格納します。ideoneで(stdinを使用した)
実行例を参照してください。
#include <stdio.h>
int main()
{
/* maybe the buffer must be greater */
char lineBuffer[256];
FILE *potential = fopen("orderedfile.txt", "r");
/* loop through every line */
while (fgets(lineBuffer, sizeof(lineBuffer), potential) != NULL)
{
double a, b, c;
/* if there are 3 items matched print them */
if (3 == sscanf(lineBuffer, "%lf %lf %*f %lf", &a, &b, &c))
{
printf("%f %f %f\n", a, b, c);
}
}
fclose(potential);
return 0;
}
指定したヘッダーで機能していますが、ヘッダーに次のような行がある場合:
1 1 2 0.049331
が表示され、この行も読み取られます。別の可能性は、指定されたヘッダーにある単語が存在するEND header
場合BEGIN header
はその単語を検索するか、行数がわかっている場合は行数を使用することです。
サブ文字列を検索するには、関数strstr()を使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加