この記事の内容は、PHP テキストの操作方法の収集と比較です。今、私はそれをみんなと共有し、困っている友達にも参考にすることができます
fgets と fputs、fread と fwrite、fscanf と fprintf
文字列の読み取りおよび書き込み関数 fgets および fputs
1. 文字列の読み取り関数 fgets 関数の機能は、指定されたファイルから文字列を文字配列に読み取ることです。関数呼び出しの形式は次のとおりです: fgets (文字配列名, n)。 , ファイル ポインタ); ここで、n は正の整数です。ファイルから読み取られた文字列が n-1 文字を超えないことを示します。読み取られた最後の文字の後に文字列の終端マーク ' を追加しますこのプログラム例では、2 つの構造体配列 boya とboyb と 2 つの構造体ポインター変数 pp と qq を示す構造体 stu を定義します。 pp は boya を指し、qq はboyb を指します。プログラムの 16 行目では、バイナリ ファイル「stu_list」を読み書きモードで開き、2 つの生徒データをファイルに書き込みます。その後、ファイルの内部位置ポインタがファイルの先頭に移動されます。 2 つの * ブロックを選択すると、画面に表示されます。
書式付き読み取りおよび書き込み関数 fscanf および fprintf
fscanf 関数、fprintf 関数は、以前に使用した scanf 関数および printf 関数と同様の機能を備えており、どちらも書式付き読み取りおよび書き込み関数です。 2 つの違いは、fscanf 関数と fprintf 関数の読み取りおよび書き込みオブジェクトがキーボードやモニターではなく、ディスク ファイルであることです。これら 2 つの関数の呼び出し形式は次のとおりです: fscanf (ファイル ポインター、フォーマット文字列、入力テーブル列); fprintf (ファイル ポインター、フォーマット文字列、出力テーブル列) 例:
fscanf(fp,"%d%s ") ,&i,s);
fprintf(fp,"%d%c",j,ch);
例 10.6 の問題は、fscanf 関数と fprintf 関数を使用して完了することもできます。変更されたプログラムを例 10.7 に示します。
[例 10.7]
#include
char name[10];
char addr[2]; [2],*pp,*qq;
FILE *fp;
pp=boya;
if((fp=fopen) ,"wb+"))==NULL)
{
printf("どのキーも終了できません!");
getch(1);
printf("ninput datan"); for(i=0;iscanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->; addr);
pp=boya;
for(i=0;i<2;i++,pp++)
fprintf(fp,"%s %d %d %sn",pp->name,pp->num ,pp->age,pp->
addr);
for(i=0;ifscanf(fp,"%s %d %d %sn) ",qq->名前,&qq->num,&qq->年齢,qq->addr);
printf("nnnametnumber age addrn");
qq=boyb;
for(i=0;i< ;2;i++,qq++)
printf("%st%5d %7d %sn",qq->名前,qq->番号, qq->年齢,
qq->addr); fp);
}
例 10.6 と比較すると、このプログラムの fscanf 関数と fprintf 関数は一度に 1 つの構造体配列要素しか読み書きできないため、すべての配列要素の読み書きにはループ ステートメントが使用されます。また、ポインタ変数 pp と qq はループによって値が変更されているため、それぞれプログラムの 25 行目と 32 行目で配列の最初のアドレスが再割り当てされることに注意してください。
ファイルのランダムな読み書き
先ほど紹介したファイルの読み書き方法はシーケンシャル読み書きです。つまり、ファイルの読み書きは先頭からしか開始できず、各データを順番に読み書きします。しかし、実際の問題では、ファイルの指定された部分のみの読み取りと書き込みが必要になることがよくあります。この問題を解決するには、ファイル内の位置ポインタを読み取りと書き込みが必要な場所に移動してから読み取りと書き込みを行うことができます。この種の読み取りと書き込みはランダム読み取りと書き込みと呼ばれます。ランダムな読み取りと書き込みを実現する鍵は、必要に応じて位置ポインターを移動することです。これをファイルの位置決めと呼びます。ファイルの内部位置ポインタを移動するファイル位置決めには、rewind 関数と fseek 関数という 2 つの主な関数があります。
rewind 関数はこれまでに何度も使用されてきました。その呼び出し形式は次のとおりです: rewind (ファイル ポインター); その機能は、ファイル内の位置ポインターをファイルの先頭に移動することです。以下では主に
fseek関数を紹介します。
fseek 関数は、ファイルの内部位置ポインターを移動するために使用されます。その呼び出し形式は次のとおりです: fseek (ファイル ポインター、変位、開始点); ここで、「ファイル ポインター」は、移動されたファイルを指します。 「ディスプレイスメント」は移動したバイト数を表し、ファイル長が64KBを超える場合にエラーが発生しないように、ディスプレイスメントは長いデータにする必要があります。定数を使用して変位を表す場合は、接尾辞「L」が必要です。 「開始点」は、変位の計算を開始する位置を示します。指定される開始点は、ファイルの先頭、現在位置、ファイルの末尾の 3 つです。
表現方法は表10.2の通りです。
開始点
例:
fseek(fp,100L,0); 意味位置ポインタをファイルの最初の 100 バイトに移動します。 fseek 関数は通常、バイナリ ファイルに使用されることにも注意してください。テキスト ファイルで変換する必要があるため、計算された位置に誤差が発生することがよくあります。位置ポインタを移動した後、前に紹介した読み取りおよび書き込み関数のいずれかを使用して、ファイルのランダムな読み取りおよび書き込みを実行できます。データブロックは通常、読み書きされるため、fread 関数と fwrite 関数がよく使用されます。次の例は、ファイルのランダムな読み取りと書き込みを説明するために使用されます。
[例 10.8] 生徒ファイル stu リストの 2 番目の生徒のデータを読み取ります。
#include
char name[10];
char addr[15];
main()
{
; FILE *fp;
int i=1;
if((fp=fopen("stu_list")==NULL)
{
printf("ファイルストライクを開くことができません任意のキーで終了!");
getch();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct stu),0);
fread(qq,sizeof(struct) stu),1,fp);
printf("nnnametnumber age addrn");
printf("%st%5d %7d %sn",qq->name,qq->num,qq->age,
qq->addr);
}
ファイル stu_list は、例 10.6 のプログラムによって作成されています。このプログラムは、ランダム読み取りを使用して 2 番目の生徒のデータを読み取ります。プログラムではboyはstu型変数として定義されており、qqはboyへのポインタとなっています。バイナリ ファイルを読み取るためにファイルが開かれ、プログラムの 22 行目でファイルの場所ポインタが移動されます。 i 値は 1 です。これは、ファイル ヘッダーから開始して 1 つの stu タイプの長さを移動し、その後、2 番目の生徒のデータを読み取ることを意味します。
ファイル検出関数
C言語でよく使われるファイル検出関数には以下のようなものがあります。
1. ファイル終了検出関数 feof 関数呼び出し形式: feof (ファイルポインタ);
機能: ファイルが終了している場合は 1、そうでない場合は 0 を返します。 。
2. ファイルの読み書きエラー検出関数 ferror 関数呼び出し形式: ferror (ファイルポインタ);
機能: 各種入出力関数を使用してファイルの読み書き時にエラーがないかを確認します。 ferror 戻り値が 0 の場合はエラーがないことを意味し、それ以外の場合はエラーがあることを意味します。
3. ファイルエラーフラグとファイル終了フラグを 0 に設定します。関数 clearerr 関数呼び出し形式: clearerr (ファイルポインター);
関数: この関数は、エラーフラグとファイル終了フラグをクリアして値を保持するために使用されます。 0の。
Cライブラリファイル
Cシステムには、ライブラリファイルと呼ばれる豊富なシステムファイルが用意されています。Cライブラリファイルは、ヘッダファイルと呼ばれる拡張子「.h」が付いたファイルです。 include コマンドを何度も実行します。 「.h」ファイルには、定数定義、型定義、マクロ定義、関数プロトタイプ、さまざまなコンパイル選択設定などの情報が含まれています。もう 1 つのタイプは関数ライブラリです。これには、ユーザーがプログラム内で呼び出すためのさまざまな関数のターゲット コードが含まれています。通常、プログラム内でライブラリ関数を呼び出す場合、関数のプロトタイプが配置されている ".h" ファイルを呼び出しの前にインクルードする必要があります。
すべてのライブラリ関数は付録に記載されています。
ALLOC.H メモリ管理機能(割り当て、解放など)を記述します。
ASSERT.H アサートデバッグマクロを定義します。
BIOS.H ハンドオーバーでは、IBM-PC ROM BIOS サブルーチンのさまざまな関数を呼び出すように指示します。
CONIO.H DOSコンソールI/Oサブルーチンの各種関数呼び出しの説明。
CTYPE.H 文字の分類と変換に関する名前の型情報(isalphaやtoastciiなど)が含まれます。
DIR.H ディレクトリとパスに関連する構造体、マクロ定義、関数が含まれます。
DOS.H MSDOSと8086で呼び出される一部の定数と関数の定義と説明。
ERRON.H エラーコードのニーモニックを定義します。
FCNTL.H オープンライブラリサブルーチンに接続する際のシンボリック定数の定義。
FLOAT.H 浮動小数点演算に関連するいくつかのパラメータと関数が含まれています。
GRAPHICS.H は、グラフィックス関数に関連するさまざまな関数、グラフィックス エラー コードの定数定義、さまざまなドライバーのさまざまなカラー値、および関数で使用されるいくつかの特別な構造について説明します。
IO.H 低レベルI/Oサブルーチンの構造と説明が含まれます。
LIMIT.H 環境パラメータ、コンパイル時間制限、数値範囲などの情報が含まれます。
MATH.H 数学演算関数を説明し、HUGE VALマクロも定義し、matherrとmatherrサブルーチンで使用される特殊な構造についても説明します。
MEM.H いくつかのメモリ操作関数を記述します(そのほとんどはSTRING.Hにも記述されています)。
PROCESS.H プロセス管理の各種機能、spawn...とEXEC...関数の構造記述を説明します。
SETJMP.H longjmp関数とsetjmp関数で使用するjmp buf型を定義し、これら2つの関数を記述します。
SHARE.H ファイル共有機能のパラメータを定義します。
SIGNAL.H rajse と signal の 2 つの関数を説明するために、SIG[ZZ(Z] [ZZ)]IGN と SIG[ZZ(Z] [ZZ)]DFL 定数を定義します。
STDARG.H 関数パラメータテーブルを読み込むためのマクロを定義します。 (vprintf、vscarf 関数など)。
STDDEF.H いくつかのパブリックデータ型とマクロを定義します。
STDIO.H Unix System V で Kernighan と Ritchie によって定義された標準および拡張型とマクロを定義します。また、標準 I/O 事前定義ストリーム (stdin、stdout、stderr) も定義し、I/O ストリーム サブルーチンを記述します。
STDLIB.H 変換サブルーチン、検索/ソートサブルーチンなど、よく使われるいくつかのサブルーチンについて説明します。
STRING.H いくつかの文字列操作とメモリ操作関数を記述します。
SYSSTAT.H ファイルを開いたり作成したりするときに使用されるいくつかの記号定数を定義します。
SYSTYPES.H では、ftime 関数と timeb 構造体について説明します。
SYSTIME.H 時間のタイプ time[ZZ(Z] [ZZ)]t を定義します。
TIME.H ctime、difftime、gmtime、localtime、stimeで使用される時刻変換サブルーチンasctime、localtime、gmtimeの構造を定義し、これらの関数のプロトタイプを提供します。
VALUE.H マシンのハードウェアに依存する定数や、浮動小数点と倍精度の値の範囲を含む Unix System V との互換性のために指定された定数など、いくつかの重要な定数を定義します。
関連する推奨事項:
PHP テキスト操作メソッド集比較ページ 1/2_PHP チュートリアル
以上がPHPテキスト操作メソッド集比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。