#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX_LEN 20 /* 입력문자열의 최대 길이 */
#define MAX_LINE 255 /* 레코드화일에서 레코드가 기록되어 있는 라인의 최대길이 */
int main( int narg, char* argc[] ){
/*
lnstr : 라인문자들을 저장하는 문자열, skstr : 검색할 문자열
delims : 레코드 사이의 분리자가 아래 delims라는 분리 문자열들 중의 어느하나라고
가정, ' ,'(콤마), ' '(공백 : SPACE), '\r'(CR : CARRAGE RETURN), '\n'(LF : LINEFEED )
record : 분리자에 의하여 분리된 문자열로서 여기서는 레코드로 간주합니다. */
char lnstr[MAX_LINE], skstr[MAX_LEN], delims[] = ", \r\n";
char* record;
FILE* ifs; /* 입력화일 스트림 */
int found = 0, irecord = 0; /* 발견된 레코드수, 레코드의 인덱스 */
if( narg < 2 ){
printf( "레코드 화일이름이 입력되지 아니하였습니다.\n" );
getch();
return 0;
}
else if( narg > 2 ){
printf( "명령라인에 너무 많은 파라메타가 전달되었습니다.\n" );
getch();
return 0;
}
/* 문자열 검색이므로 화일을 TEXT 모드로 읽기 위하여 개방합니다 */
ifs = fopen( argc[1], "rt" );
if( ifs == NULL ){
printf( "%s라는 화일을 열수가 없습니다.\n", argc[1] );
getch();
return 0;
}
printf( "검색할 문자열을 입력하십시오. \n" );
scanf( "%20s", skstr );
/* 화일의 끝이 아니면 각 라인을 읽고 라인을 분리자들로 분리하여 레코드들을
추출하고 검색문자와 동일한지 비교합니다.. */
while( feof( ifs ) == 0 ){
if( fgets( lnstr, MAX_LINE, ifs ) && strcmp( lnstr, "") ){
record = _fstrtok( lnstr, delims );
while( record && strcmp( record, "" ) ){
irecord++;
/* record가 검색어 skstr과 일치하면 그 위치를 출력 합니다. */
if( strcmp( skstr, record ) == 0 ){
printf( "%d\n", irecord );
found++;
}
record = _fstrtok( NULL, delims );
}
}
}
/* 발견된 레코드가 없으면 0을 출력합니다. */
if( found == 0 )
printf( "%d", found );
getch(); /* 화면을 닫기 전에 키 입력이 있을 때 까지 결과를 살핀다. */
fclose( ifs ); /* 화일을 닫는다. */
return 1;
}
문자 메시지 실패에도 왜 과금되는가? (0) | 2008.04.21 |
---|---|
자바스크립트 상세 달력버튼 만들기.. (0) | 2008.01.15 |
CPU, MEM 정보 구하기 (0) | 2007.12.11 |
VC++ 헤더 및 라이브러리 설명 (0) | 2007.12.05 |
TOMCAT 한글깨짐현상 (0) | 2007.12.03 |