2016-09-17 3 views
2

저는 라켓 언어의 신참이며 일반 텍스트 파일의 특정 줄에 문자열 (새 줄)을 쓰는 방법을 모르겠습니다.라켓 언어를 사용하여 일반 텍스트 파일의 특정 줄에 문자열을 쓰는 방법은 무엇입니까?

나는 append 프로 시저가 파일 끝에 새 줄을 삽입하는 작업을 수행하는 것을 보았습니다.

또한 Racket 설명서는 Counting Positions, Lines, and Columns에 관한 것이지만 쉽게 이해할 수있는 예제는 찾지 못했습니다.

예를 들어 내가 원하는 것을 더 잘 보여줄 수 있습니다.

(test.txt라고) 파일을 가정 10 개 라인을 가지고 있는데 라인 (7)과 새로운 라인을 성공적으로 삽입 한 후 내 말 8

사이에 문자열 " New information starts here."를 작성해야는 test.txt 파일이있을 것입니다 11 라인.

도움을 주시면 감사하겠습니다. 베스트.

답변

2

가장 간단한 방법은 이전 파일의 복사본을 만들고 복사하는 동안 새 줄을 삽입하는 것입니다. 그런 다음 이전 파일을 삭제하고 새 파일의 이름을 이전 파일 이름으로 바꿉니다. 다음과 같이

복사

은 할 수 :

내가 의미 한 것을 다른 것으로 @soegaard 결과가 제시 한 코드입니다 실행하고
#lang racket 

; insert-line : string number -> 
; Almost copies line for line the current input port to the current output port. 
; When line-number lines have been copied an extra line is inserted. 
(define (insert-line line line-number) 
    (for ([l (in-lines)] 
     [i (in-naturals)]) 
    (when (= i line-number) 
     (displayln line)) 
    (displayln l))) 

; insert-line-in-file : file file string number -> 
; copies file-in to file-out and inserts the line line at the given line number. 
(define (insert-line-in-file file-in file-out line line-number) 
    (with-outout-to-file file-out 
    (λ() 
     (with-input-from-file file-in 
     (λ() 
      (insert-line line line-number)))))) 
+0

. 'file-in test.txt'의 내용은 다음과 같습니다. ** Line 1 Introduction. 2 번 항목 1 1. 3 호 주제 2 4 호 결론. ** '(insert-line-in-file "test.txt" "out.txt" "주제 2"3)' 결과는'out.txt' 파일 안에 있습니다. ** 1 호 소개. 라인 2 항목 1. 라인 3 항목 2. 항목 4 행 3. 결론 라인 5 ** 그러나, 출력이었다. ** 1 행 항목 3. 항목 2 라인 3. 라인 3 주제 3. 행 4 주제 3. 행 5 주제 3 ** ** –

+1

수정 됨. 삽입 행에 (표시 행) 대신 (표시 행 1) 표시되어야합니다. 또한 0부터 계산합니다. – soegaard

+0

'with-outout-to-file'을'with-output-to-file'으로 대체하여 조금 수정했습니다. –

관련 문제