PHPゴルフのヒント:ファイルの読み書きとCLI


8

私はゴルフは最近、およびなどのファイルからデータを読み取るために使用されている技術のいくつかの課題PHPコードの数に参加しているfopen()fread()か、file_get_contents()本当に私のコードchar型の数に打撃を与えます。特に、コマンドライン入力を読み込むために提供されるメソッド。

私の質問は、ファイルの内容を読み書きする最速の方法(最小キーストローク)と、プロンプトから行を読み込む最速の方法(最小キーストローク)は何ですか?

(注:これはコードゴルフなので、外部ライブラリは使用できません。)

回答:


6

STDIN13文字で行を読み取ることができます。

fgets(STDIN);

ここに見られるよう

ファイルからの読み取り:

file('filename')

ファイルの行の配列を返します

fputs代わりにfwriteを使用すると、文字が節約されますが、次の方法よりも短い方法は考えられません。

fputs(fopen('filename','w')); //use 'a' if you're appending to a file instead of overwriting

これはわずかに短いです:

file_put_contents('filename');

すごい!ファイルへの書き込みについて何かアドバイスはありますか?
ダンプリンス

@DanPrince執筆に少し追加しました。現時点ではそれより短いものは何も表示されません。
Garethは

6

入力形式によっては、fgetcsvfscanfもバイトセーバーになることがよくあります。

たとえば、入力の各行がスペースで区切られた2つの整数で構成されているとします。これらの値を配列に読み込むには、次のいずれかを使用できます。

$x=split(' ',fgets(STDIN)); // 27 bytes
$x=fgetcsv(STDIN,0,' ');    // 24 bytes
$x=fscanf(STDIN,'%d%d');    // 24 bytes

または、それぞれを別の変数に読み込みたい場合:

list($a,$b)=split(' ',fgets(STDIN)); // 36 bytes
list($a,$b)=fgetcsv(STDIN,0,' ');    // 33 bytes
fscanf(STDIN,'%d%d',$a,$b);          // 27 bytes

0

非物理ファイルを読み取る(入力を読み取る)

単一行の入力がある場合は、-Fand $argnを使用してSTDINから読み取ります。これはわずか5バイトで、他の方法よりもはるかに短いです。

例:オンラインでお試しください!

基本的に-F、コードは入力の1行ごとに1回実行され、$argnその入力行の文字列で埋められます。詳細:https : //www.php.net/manual/en/features.commandline.options.php


複数行入力がある場合は、を使用します$argv$argvインデックスから始まる配列で1、コードに渡すすべての引数が含まれます。したがって、使用できるの$argv[1]は8バイトだけです。複数の引数を渡してそれらをループすることもできますがfor(;$a=$argv[++$i];)、通常は他のメソッドよりも短くなります。

例1:オンラインで試す!

例2:オンラインで試す!

詳細:https : //www.php.net/manual/en/reserved.variables.argv.php

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.