/* C言語でテキストファイルの内容を表示するtextdump.php */
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
char buf[2010];
if(argc != 2){
fprintf(stderr,"テキストファイルの内容を表示します。\n");
fprintf(stderr,"使い方: texdump 読み込みファイル名\n");
return 1;
}
if((fp = fopen( argv[1],"rt")) == NULL){
/* UNIXでは"rt"ではなく"r" */
fprintf(stderr,"ファイルオープンエラー[%s]",argv[1]);
return 2;
}
while(fgets(buf,2000,fp) != NULL){
printf(buf);
}
fclose(fp);
return 0;
}
PHPソースコード
<?php
/* PHPでテキストファイルの内容を表示するtextdump.php */
/* C言語と互換が高くC言語ができる人ならPHPを知らなくても意味が分かる */
/* C言語からPHPへの移植、PHPからC/C++への移植は簡単。*/
if($argc != 2){
fprintf(STDERR,"テキストファイルの内容を表示します。\n");
fprintf(STDERR,"使い方: php texdump.php 読み込みファイル名\n");
return 1;
}
if(($fp = fopen( $argv[1],"rt")) == NULL){
fprintf(STDERR,"ファイルオープンエラー[%s]",$argv[1]);
return 2;
}
while(($buf = fgets($fp,2000)) !== false){
printf($buf);
}
fclose($fp);
return 0;
?>
Perlソースコード
#Perlでテキストファイルの内容を表示するtextdump.pl
#C言語風に書こうとしているが、あまりC言語に似ない
#PerlでのコメントはC言語の/* */もC++の//も使えない。
#最大文字数を指定する一行読み込み関数がないようなので自作
#サブルーチン ファイルを一行読む。改行除く最大文字数指定。
sub fgets{
my $buf;
my $fp = $_[0];
my $maxlen = $_[1];
my $cnt = 0;
$buf = "";
while (1){
$c = getc($fp);
if(!defined($c)){
last;
}
if($c eq "\r"){
}
elsif($c eq "\n"){
$buf = $buf . $c;
last;
}
else{
$buf = $buf . $c;
++$cnt;
if($cnt >= $maxlen){
while(1){
$c = getc($fp);
if(!defined($c)){
last;
}elsif($c eq "\n"){
$buf = $buf . "\n";
last;
}
}
last;
}
}
}
if(!defined($c) && $cnt == 0){
return undef;
}
return $buf;
}
#C言語のargcは、Perlでは @ARGVと似ない。
if(@ARGV != 1){
printf(STDERR "テキストファイルの内容を表示します。\n");
printf(STDERR "使い方: perl texdump.pl 読み込みファイル名\n");
#main()に相当するreturnを書くとPerlでエラーが出たのでexitで代用
exit(1);
}
#C言語のargv[1]は、Perlでは $ARGV[0]と添え字の数値がずれる。
#C言語のfopenは、Perlには無い。
if(open($fp, $ARGV[0]) == undef){
#fprintfはPerlには無い。
#C言語風にSTDERRの次にカンマ(,)を付けるとPerlではエラー
printf(STDERR "ファイルオープンエラー[%s]",$ARGV[0]);
exit(2);
}
#最大文字数を指定する一行読み込み関数がないようなので自作したfgetsを呼ぶ
while(defined($buf = fgets($fp,2000))){
printf($buf);
}
close($fp);
exit(0);
C言語の話
あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ