본문 바로가기

프로그래밍./C언어.

파일 중간에 텍스트 삽입하기 (원리 이해)

파일 중간에 텍스트 삽입하기에 원리를 이해해 보자.


A.txt 파일에 next란 단어 뒤에 B.txt의 파일의 내용을 넣는다고 가정하자.

기본적인 원리는 이렇다.
1. A.txt, B.txt, Temp.txt 파일이 필요. 2개의 배열과 1개의 문자 포인터.
2. A.txt 파일의 한줄을 읽어서 미리 만들어 놓은 배열에 저장한다.(fgets 사용)
3. 미리 만들어둔 배열에서 next라는 문자열이 있는지 검사한다. (strstr()사용)
4. 없다면 배열의 내용을 Temp에 기록한다. (fputs() 사용)
5. 3~4번을 반복하면서 next가 발견되면 배열에는 next를 포함한
   그 한줄이 저장되어 있는데, strstr()을 사용해 배열에서 next 위치 확인.
6. 배열의 0번에서 next의 위치까지는 Temp에 기록한다.
7. B.txt를 한줄 한줄 읽어서 Temp에 모두 기록한다.(2,4 반복.) 다른 배열 사용.
8. 배열에서 next 위치부터 남은 뒷 부분을 Temp에 기록한다.
9. A.txt 파일을 삭제하고, Temp.txt 파일명을 A.txt로 바꾼다.

이런식인데, 일단 기본적으로 가장 중요한 9번.
잘 되는지 안 되는지도 모르는데 삭제하면 곤란하니, 일단 빼고 실행한 후.
확인해봐서 완벽하게 제대로 삽입이 된다면 그 때 추가로 하는게 좋겠다.

그리고 여기서 가장 힘들었던, 내가 생각하는 키 포인트는
6번과 8번. 원하는 문자열이 있는 한 줄을 저장한 배열에서
원하는 문자열 전까지 기록하는게 이상하게 햇갈렸다 - 0-;;

strstr()을 이용하면 배열에서 찾는 문자열의 위치가 나온다길래
배열의 인덱스 값. 즉 배열에서 몇번째 인지 나오는줄 알았더니
오리지날 실제 메모리 주소값이 나왔다- -; 1248892였던가? 대충 뭐 그랬다.
여기서 나온 주서는 찾는 문자열이 next라면 n의 주소이다.
따라서 위 주소부터 시작하면 next 부터 뒤 부분이 찍히는 거다. (next 포함)
반대로 위 주소 전까지 찍으면 배열 처음부터 next 전까지 찍힌다.(next 미포함)

원하는 문자열의 뒷부분은 어차피 주로를 알고 있으니 ++해서 null까지
계속 찍어내면 됬었는데, 앞부분은 좀.. - -; 위치를 num에 넣고
while(&arr[i] != num) 에 i++ 하면서 계속 한글자씩 찍어냈다. Temp에.

아직도 이거 말고는 딱히 방법이 떠오르지 않는다. 분면 뭔가 있을텐데;

앞부분 찍어 낼 때.
while(&arr[i] != num)
{
fputc(arr[i], fpw);
i++;
}


뒷부분 찍어 낼 때. 
while(*num != NULL)
{
fputc(*num,fpw);
num++;
도움이 되셨다면 아래의 손가락 버튼도 한번 눌러주세요 ^^