# grep for perl version
# Usage: mygrep pattern file1 file2 ...
#
if (@ARGV < 1) {
die "Usage: mygrep pattern [file..]\n";
}
$pattern = shift;
foreach $file (@ARGV) {
open(FILE, $file);
$line = 1;
while (<FILE>) {
print "$file $line: $_" if /$pattern/o;
$line++;
}
close(FILE);
}
つまり.cファイル内にある例えばprintfと検索かけたらカレントディレクトリ内にあるファイルの中にあるprintfと書いてある文字列を全部書き出しなさいということです
使用環境はVISUALC++ GCC(基本あとでGCCに書き直します)
使用技術レベルは・・・ファイルの入出力の基本ぐらいです。
また
まずはカレントディレクトリ内にある.cファイルを全部ファイル名とファイル内を出力させるところから始めようと思いますので
http://www5c.biglobe.ne.jp/~ecb/c/c00.htmlというところで
ファイルの検索のやり方が書いてあったので(理解できてませんが)
#include <stdio.h>
#include <io.h>
#include <time.h>
void main( void ){
struct _finddata_t c_file;
long hFile;
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( "*.*", &c_file )) == -1L )
printf( "カレント ディレクトリにはファイルは存在しません。\n" );
else{
printf( "ファイルのリスト\n\n" );
printf( "RDO HID SYS ARC FILE DATE %25c SIZE\n", ' ' );
printf( "--- --- --- --- ---- ---- %25c ----\n", ' ' );
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-12s %.24s %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-12s %.24s %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
}
_findclose( hFile );
}
}
を改造して
#include <stdio.h>
#include <io.h>
void main( void ){
struct _finddata_t c_file;
long hFile;
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( "*.*", &c_file )) == -1L )
printf( "カレント ディレクトリにはファイルは存在しません。\n" );
else{
printf( "ファイルのリスト\n" );
printf( "%-12s\n", c_file.name );
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
printf( "%-12s\n", c_file.name );
}
_findclose( hFile );
}
}
でファイル名だけ出すようにしてそこから
#include <stdio.h>
#include <io.h>
void main( void ){
struct _finddata_t c_file;
long hFile;
char fname[99];
int i = 0;
FILE *fp;
// カレント ディレクトリ内の最初のファイルを探します。
if( (hFile = _findfirst( "*.c", &c_file )) == -1L )
printf( "カレント ディレクトリにはファイルは存在しません。\n" );
else{
printf( "ファイルのリスト\n" );
printf( "%s\n", c_file.name );/*ファイル名を出力しなさい*/
sprintf(fname,"%s",c_file.name);/*ファイル名をfnameに文字データとして代入させなさい*/
fp = fopen(fname, "r");/*ファイルを開きなさい*/
i++;
// 残りのファイルを探します
while( _findnext( hFile, &c_file ) == 0 ){
printf( "%s\n", c_file.name );/*ファイル名を出力しなさい*/
sprintf(fname,"%s",c_file.name);/*ファイル名をfnameに文字データとして代入させなさい*/
fp = fopen(fname, "r");/*ファイルを開きなさい*/
i++;
}
_findclose( hFile );
}
}と改造したのですが・・・(やっぱりsprintfが無理がある?)
回答のほうよろしくお願いします。