다시 오신 걸 환영해요
이번 강의에서는 파일에서 텍스트를
읽는 방법에 대해 얘기해 볼게요
지금은 텍스트 파일 읽기에 중점을 두죠
텍스트 파일을 읽고 싶다면 몇 가지 함수를
사용할 거예요
첫 번째는 fgetc예요
이건 읽기 위해 연 텍스트 파일의 한 글자를 읽을 거예요
네 파일 작업을 수행하기 전에 항상 파일을 열어야 한다는
걸 기억하세요 이름 변경이나 삭제가 아니라면요
그럼 파일은 열 수 없죠
읽기와 쓰기나 어텐딩을 하려면 그
파일을 열어야 해요
우린 다양한 모드로 업파일을 열 수 있다는 걸 알죠
네 이 경우엔 읽기를 하려면 r이나 r+로 시작해야 해요
그런 다음 fgetc를 호출하죠
네 네 fgetc 함수는 파일 포인터를 유일한 인수로 받아들이고
읽힌 글자를 type int로 리턴합니다
여기 예제에서 mchartype int를 생성하고 fgetc pfile이라고 해요
pfile을 파일 포인터로서 mchar 변수인 mcharo를
읽어요
파일 포인터로 리턴하는 Pfile이 이미 열렸다고 생각해 보세요
네 mchar가 입력되는 이유는 eof 때문이죠 저희의 특별한
캐릭터예요 파일의 끝부분이죠 파일이 완료되면 반환이 됩니다
그럼 언제라도 감염 여부를 확인할 수 있겠네요
그렇다면 더는 읽기 싫고 fgetc도
호출하기 싫죠
fgetc 함수는 fgetc와 중복되는 기능이에요
getc는 거의 같은 asfgetc예요 fgetc를 사용하고 싶을 뿐이죠
보호 장치가 더 있는 것 같아요
네 getc에선 게텍과 함께 그리고 int
형식의 red를 반환해요
fgetc와 거의 똑같아요
그 둘의 유일한 차이는 getc가 macro로 구현될 수
있다는 거죠 우린 현재 macro가 뭔지도 몰라요
그래서 fgetc를 활성화해 캐릭터를 읽도록
할 거예요
파일의 내용을 읽을 수 있죠
다시 다시 필요할 때 되감기 함수를 사용할 수 있습니다 파일 포인터에
의해 지정된 파일을 파일의 시작으로 배치하는 거죠
다시 읽고 싶으면 되감기를 사용하세요
되감기를 하고 파일 포인터를 사용하세요.
여기 예제가 있어요
파일 연산을 할 때마다 The Standard io
header를 포함해야 해요
주요 기능에서는 파일 포인터를 생성하기 위해 리지던트를 하죠
이걸 null로 초기화하려면 정수를 만들어야 해요
네 가장 먼저 파일을 열겠습니다 F 열기 호출을
이용합니다 파일의 이름을 명시할 것입니다 읽기 위해서라는 것을 명시할
것입니다
파일 포인터를 반환하죠
이제 fp 포인터는 유효한 파일을 가리키죠
파일을 열 수 없다면요 올바른 경로가 아니든
뭐든 null을 반환할 거예요
null인지 확인하고 fp가 null이 아닌지 확인하세요
무효가 되면 프로그램을 종료하세요
안 그러면 보통 캐릭터를 읽을 때 루프 안에
있게 되거든요
이렇게 말하죠 c = fgetc fp요 파일 포인터를 fgetc로
넘기는 문자를 읽습니다 정수를 반환하죠
기억하세요, 만약 정수가 파일의 끝으로 반환되면 루프에서 나갈 수
있습니다 파일의 끝 이후로는 읽기 싫으니까요
아니면 % c와 c를 이용해 출력하면 되죠
네 네 절대 파일을 닫으면 안 돼요 그런 다음 파일 포인터를
null로 설정해 반환합니다
이걸 활용해 보죠 코드 블록 안에 이걸 생성하는 거예요
이게 코드블록 안의 우리 프로그램이에요
네 네 프로그램이 실행되는 디스크에 파일이 없으면 이 프로그램은 작동하지
않는다고 합니다
네 먼저 이걸 빌드하면 빌드돼야 해요 네 하드 드라이브
어딘가에 실행 파일이 생성돼야 하죠
제 모든 프로젝트를 . 대출 디렉터리에 온라인으로 저장했어요
네 다운로드 디렉터리로 가서 프로젝트 이름으로
갑니다 이건 테스트 프로젝트죠 프로젝트를 저장하는 곳이 어디든 제 건 테스트
중입니다
테스트로 가면 bin 디렉터리 안에 디버그 안에 실행
가능한 게 보이죠
여기서 친척이 있다면 파일을 만드세요
경로 여기서 새 파일을 생성해 텍스트 파일로 만들 수 있어요 텍스트
문서를 생성할 수 있고 명명된 파일이어야 합니다
그 안에 정보를 넣을 거예요
데이터 스택을 넣을게요. 하이. Jason 라인 피드에요.
좋아요, 아뇨, 기타 등등 저장할게요
이 프로그램이 작동하려면 파일이 존재해야 해요
파일을 생성했어요
이제 실행하면 제가 추가한 걸 읽고 프린트하길
바라야죠
네 오류 및 파일 열기 파일: 없습니다
디버그 폴더에 있기 때문일 겁니다
이건 디버그에서 실행되지 않아요
디버그에서 실행해보죠 앤디, 이제 될 것 같아요
디버그, 시작이라고 할 수 있죠
이건 디버그 디렉터리에서 실행 가능한 걸 찾을 거예요
제대로 작동하는지 확인해야죠
여전히 없네요 그러니 실행 파일이 어디 있는지 알아야 해요
네 다른 데서 해보죠 아니면 더 낫네요 디버그 디렉터리 안에서 실행 파일을 실행하면 거기서
찾을 수 있을 겁니다 ? 디버그 디렉터리요
더블 클릭해도 정지가 안 돼요
눈에 확 띄죠
네 그걸 위해 할 수 있는 건 리턴하는
대신 시스템 일시 정지를 명령하는 거죠 그럼 실행할 때까지 프로그램을 종료하지 않아요
이제 해 보죠
그래서 지금은 프로그램을 중단하지 않았어요
제가 제이슨이라는 걸 알 수 있었죠
파일을 찾아 프린트하고 프린트하고
정지할 수 있어요
그렇죠 그렇지 않으면 프로그램을 실행할 때 데이터가 너무
빨리 출력되고 프로그램이 종료돼요 끝이라는 걸
이렇게 테스트할 수 있어요
실행 중인 실행 도구가 저장된 곳에 저장되어야 하죠
프로젝트 디렉터리 어딘가에서 실행 중일 거예요
어디서 뛰어가는지 모르겠어요
소스 코드가 있는 곳으로 필레토를 이동시킬 수 있어요
여기서 작동하는 것 같아요
여기에 넣을 거예요
이제 ID에서 실행해 볼게요 작동할지도 모르겠네요
우린 짓지 않아요
그걸 실행했더니 찾을 수 있었죠
소스 코드가 있는 곳에 파일을 넣어야 할
것 같네요
저 파일 파일 파일만 넣으면요 프로젝트 파일 안에 텍스트가
있죠 보실 수 있을 거예요
네 파일을 열고 한 글자를 읽는 간단한 예죠 파일을 읽는
가장 효율적인 방법은 아닙니다 문자열을 읽어야
하기 때문입니다
하지만 이렇게 하면 열릴 거예요
f 오픈 콜이 보이시죠 while 루프를 보세요
그게 중요하죠
파일에서 문자열을 읽는 방법에 대해 얘기해보죠 훨씬
더 효율적이죠
이게 한 글자를 읽는 거예요
실을 읽는 건 어때요?
fgets 기능을 이용해 어떤 파일이나 스트림에서든 읽을 수 있죠
문자열을 읽을 거예요
첫 번째 매개 변수인 문자열을 취하죠
원하는 글자 수와 파일 포인터요
이 함수는 str을 가리키는 메모리 영역에서 문자열을
tread할 거예요.
따라서 데이터가 저장될 버퍼에 실제로
패스해야 하죠
메모리를 할당하기 위한 포인터죠
네 그런 다음 세 번째 매개 변수로 지정된 파일에서
읽어요 파일 포인터죠
읽어야 할 데이터 양이 표시되죠
네 nchars를 10처럼 입력하면 10자로 읽힐 거예요 라인 피드를
먼저 누르지 않는다면요
네 그래서 전체 줄을 읽거나 두 번째 매개 변수에서
명시하는 글자 수를 읽게 됩니다
행의 끝은 백슬래시와 먼저 발생하는 쪽이 지정하죠
네 네 뉴라인 글자가 빨간색이면 문자열에 남고
null 터미네이터가 문자열 끝에 추가돼요
네 그래서 더 많은 문자를 지정하면 라인 피드까지
읽고 점프해 새 라인 캐릭터를 얻어요
끝에 null 캐릭터를 넣죠
오류가 없으면 fgets isout해서 포인터를 반환해요
그게 첫 번째 매개 변수죠
함수에서 반환된 포인터를 반환할 거예요
그리고 str 포인터를 첫 번째 매개 변수로
채울 거예요
오류가 있으면 Null이 반환되죠
네 파일의 마지막을 읽으면 null이 반환되죠 모든
스트링을 읽게 되죠
예제를 보죠
여기 메인∙∙∙ 파일 포인터를 만들고 있어요 문자열을
만드는 거죠
여기 포인터가 있는데요 데이터는 할당하지 않고 문자
배열을 생성하죠
읽으려고 파일을 열었는데 R이라서 열었어요
Null이면 빠지라고 했죠
아니면 그냥 fgets라고 하죠 60자로 읽어요
네 그 전에 라인 피드가 있으면 라인 피드가 나와서
프린트할 거예요 str 버퍼에는 뭐가 있을까요?
str은 처음 도입된 차터예요
파일 포인터를 닫고 null로 설정하고 0을 반환해요
IDE 코드블록 내부를 다시 살펴보죠
이 프로그래밍에서 바뀐 건 14번에서 17번 줄뿐이에요
fget를 이용해 문자열을 읽고 str 버퍼도 있어요
네 여기 위에 캐릭터 배열도 만들어야
해요 우리 str이죠 이건 60개를 포함해야 해요
60분 후에 측정해요
59번에 읽히도록 라인 피드를 추가할 거예요 그리고 끝에 라인 피드를
추가하죠
그럼 61로 하죠
네 그리고 fgets는 if문에 있게 되고 각 문자열에서
읽게 됩니다 60글자를 맞추거나 새 줄을 만들 때까지요 그리고 문자열을 프린트합니다
저건 nota while 루프죠 파일
끝은 읽지 않아요
끝부분을 읽으면 0점이에요
이걸 빌드할 경우 메이저링을 하려면 따옴표를 제대로 입력해야 해요
파워포인트잇에서 복사할 때마다 따옴표가 틀려요
그리고 변수 c가 사용되지 않는다는 걸 확인해야죠
그럼 이걸 실행해보죠
안녕하세요, 제이슨이라고 해요
파일의 전체 텍스트를 읽을 수 있어요
첫 줄에 쓰여 있어요
그래서 다시 전화해서 두 번째 줄에서 읽었죠
그렇군요 네 바이트 수를 바꾸면 읽어 보세요 가령 10
바이트만 입력한다고 치죠 10으로 읽고 그 10을 리턴합니다
전체 줄을 읽는 대신에요
그래서 여기 있는 게∙∙∙ 안녕하세요
네 그래서 두 번째 매개 변수인 글자
수를 읽거나 줄 피드를 받아 str에 저장할 거예요
스트는 캐릭터 배열이죠
그걸 프린트하죠
Fget는 독서하기엔 훨씬 효율적이죠
캐릭터를 읽는 게 아니라 데이터를
읽으니까요
아타메에서는 캐릭터를 읽는 게 효율적이지 않아요
네 이제 한 글자로 읽는 법을 알았고 문자열을 읽는
법도 알았죠 새 줄이나 여러 글자를 읽을 때까지는요
파일에 입력된 정보도 읽을 수 있어요
getc, fgetc, fgets가 있어요
또 다른 오작동인 전방 스캐너예요
이건 형식화된 입력이에요
네 포맷된 입력값은 딜리미터가 지정된 데이터입니다 관련된
특정 포맷도 있고요
이 fscanf 함수는 스트림에서 파일과 포맷을 받아요
형식은 프린트폼 표준어 같은 거예요
그렇죠 정수나 두 배를 읽으려면 파일 안에서 데이터를
명시할 수 있어요 두 배로 소개된
거죠 그럼 Scanf처럼 공백 기호가 보일 때까지 그걸 읽을 거예요
네 fscanf 함수에 대한 첫 번째 인수는 스트림을 식별하는
파일 객체의 포인터입니다
어떤 파일에서 나오는 건지 알아야 해요
두 번째 이유는 형식이에요
C 문자열은 다음 항목들을 포함하고 있어요
화이트 스페이스 캐릭터 비백판차터, 포맷 스펙타이저요
사용은 Tescanf와 printf와 같지만 대신
파일에서 나오죠
네 큰 따옴표 안에는 텍스트를 넣을 수 있고 공백이나 비공백
문자를 넣을 수도 있어요 하지만 데이터에서
읽는 건 형식 지정자죠
그런 다음 입력하고 싶은 변수를 지정하죠
그래서 함수는 성공적으로 일치하고
할당된 입력 항목의 수를 반환하죠
어떻게 된 거냐면요
보다시피 3개의 문자 배열을 생성하고 있어요 str1, str2 그리고 str3이죠
각각 10바이트예요
정수를 호출한year를 만들고 파일 포인터를 누르죠
제일 먼저 파일을 열었어요
이 경우엔 읽고 쓰기 창문이 열려요
네 하지만 거기에 아무것도 쓰진 않을 겁니다 거기서 읽는
것만 표시할 거예요
파일포인터가 null과 같지 않은지 확인하고요
여기서 파일 fput에서 실제로 뭔가를 처리하고 있어요
아직 그 얘기는 안 했지만 이건 뭔가를 쓰는 거예요
전자파 탐지기에 집중해요
포맷된 데이터가 투과되고 있어요
빈칸으로 나뉜 세 개의
문자열로 읽게 되죠
스페이스 퍼센트가 스페이스 퍼센트
d예요
네 그런 다음 이것들을 세 글자 배열에서 읽어올 것입니다
그런 다음 연도를 지정하고 연도에 대한 주소연산자를
지정해야 합니다
하지만 데이터는 작성될 때 형식이 아주 정확해요
네 형식이 정해져 있는 걸 읽을 땐 파일의 형식을 이해해야 합니다
어떻게 작성됐는지도요
이 파일은 화이트스페이스로 문자열을 분리해요
저걸로 리셋하는 거예요
fscanf 호출로 읽을 수 있어요
네 네 그리고 각각의 개별 쉼표에 대한 변수 인수의 개수를 입력해
읽기 원하는 데이터를 명시하는 거죠 그리고 각 쉼표의 개별 인수를
명시하는 거예요
그런 다음 그런 다음 데이터를 출력합니다 1년에 문자열 3개요
그런 다음 파일을 닫아요
파일에서 데이터를 읽을 수 있는 세 가지 방법이에요
글자로 읽을 수도 있고 문자열로 읽을 수도 있고 형식화된 데이터를
읽을 수도 있어요
형식화된 방식은 Scanf와 아주 유사해요
형식 식별자나 변수를 이용해서요
데이터를 해독하는 데 어려움을 겪을 겁니다 그럼 좀 더
익숙해지실 테니까요
아주 기본적인 거예요
공개 호출을 하고 파일 포인터를
사용하고 그 세 가지 함수를 사용하죠
고마워요