mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-16 10:15:22 -06:00
Move gnc:substring-replace-from-to back to utilities.scm
It's used in report.scm as well as qif-imp.
This commit is contained in:
parent
9865934410
commit
36ad5064e4
@ -74,103 +74,6 @@
|
||||
(list s1))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; gnc:substring-replace
|
||||
;;
|
||||
;; Search for all occurrences in string "s1" of string "s2" and
|
||||
;; replace them with string "s3".
|
||||
;;
|
||||
;; Example: (gnc:substring-replace "foobarfoobar" "bar" "xyz")
|
||||
;; returns "fooxyzfooxyz".
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define-public (gnc:substring-replace s1 s2 s3)
|
||||
(let ((s2len (string-length s2)))
|
||||
(let loop ((start1 0)
|
||||
(i (string-contains s1 s2)))
|
||||
(if i
|
||||
(string-append (substring s1 start1 i)
|
||||
s3
|
||||
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len))))
|
||||
(substring s1 start1)))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; gnc:substring-replace-from-to
|
||||
;; same as gnc:substring-replace extended by:
|
||||
;; start: from which occurrence onwards the replacement shall start
|
||||
;; end-after: max. number times the replacement should executed
|
||||
;;
|
||||
;; Example: (gnc:substring-replace-from-to "foobarfoobarfoobar" "bar" "xyz" 2 2)
|
||||
;; returns "foobarfooxyzfoobar".
|
||||
;;
|
||||
;; start=1 and end-after<=0 will call gnc:substring-replace (replace all)
|
||||
;; start>1 and end-after<=0 will the replace from "start" until end of file
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define-public (gnc:substring-replace-from-to s1 s2 s3 start end-after)
|
||||
(let (
|
||||
(s2len (string-length s2))
|
||||
)
|
||||
|
||||
;; if start<=0 and end<=0 => don't do anything
|
||||
|
||||
(if (and
|
||||
(<= start 0)
|
||||
(<= end-after 0)
|
||||
)
|
||||
s1
|
||||
)
|
||||
|
||||
;; else
|
||||
(begin
|
||||
|
||||
;; normalize start
|
||||
(if (= start 0)
|
||||
(set! start 1)
|
||||
)
|
||||
;; start=1 and end<=0 => replace all
|
||||
;; call gnc:substring-replace for that
|
||||
(if (and (= start 1) (<= end-after 0))
|
||||
(gnc:substring-replace s1 s2 s3)
|
||||
|
||||
;; else
|
||||
(begin
|
||||
(let loop (
|
||||
(start1 0)
|
||||
(i (string-contains s1 s2))
|
||||
)
|
||||
(if i
|
||||
(begin
|
||||
(set! start (- start 1))
|
||||
(if (or
|
||||
(> start 0)
|
||||
(and (> end-after 0)
|
||||
(<= (+ end-after start) 0)
|
||||
)
|
||||
)
|
||||
(string-append
|
||||
(substring s1 start1 i)
|
||||
s2 ;; means: do not change anything
|
||||
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len)))
|
||||
)
|
||||
(string-append
|
||||
(substring s1 start1 i)
|
||||
s3
|
||||
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len)))
|
||||
)
|
||||
)
|
||||
)
|
||||
;; else
|
||||
(substring s1 start1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; gnc:string-replace-char
|
||||
;;
|
||||
|
@ -70,3 +70,101 @@
|
||||
|
||||
(define (gnc:debug . items)
|
||||
(gnc-scm-log-debug (strify items)))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; gnc:substring-replace
|
||||
;;
|
||||
;; Search for all occurrences in string "s1" of string "s2" and
|
||||
;; replace them with string "s3".
|
||||
;;
|
||||
;; Example: (gnc:substring-replace "foobarfoobar" "bar" "xyz")
|
||||
;; returns "fooxyzfooxyz".
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define-public (gnc:substring-replace s1 s2 s3)
|
||||
(let ((s2len (string-length s2)))
|
||||
(let loop ((start1 0)
|
||||
(i (string-contains s1 s2)))
|
||||
(if i
|
||||
(string-append (substring s1 start1 i)
|
||||
s3
|
||||
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len))))
|
||||
(substring s1 start1)))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; gnc:substring-replace-from-to
|
||||
;; same as gnc:substring-replace extended by:
|
||||
;; start: from which occurrence onwards the replacement shall start
|
||||
;; end-after: max. number times the replacement should executed
|
||||
;;
|
||||
;; Example: (gnc:substring-replace-from-to "foobarfoobarfoobar" "bar" "xyz" 2 2)
|
||||
;; returns "foobarfooxyzfoobar".
|
||||
;;
|
||||
;; start=1 and end-after<=0 will call gnc:substring-replace (replace all)
|
||||
;; start>1 and end-after<=0 will the replace from "start" until end of file
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define-public (gnc:substring-replace-from-to s1 s2 s3 start end-after)
|
||||
(let (
|
||||
(s2len (string-length s2))
|
||||
)
|
||||
|
||||
;; if start<=0 and end<=0 => don't do anything
|
||||
|
||||
(if (and
|
||||
(<= start 0)
|
||||
(<= end-after 0)
|
||||
)
|
||||
s1
|
||||
)
|
||||
|
||||
;; else
|
||||
(begin
|
||||
|
||||
;; normalize start
|
||||
(if (= start 0)
|
||||
(set! start 1)
|
||||
)
|
||||
;; start=1 and end<=0 => replace all
|
||||
;; call gnc:substring-replace for that
|
||||
(if (and (= start 1) (<= end-after 0))
|
||||
(gnc:substring-replace s1 s2 s3)
|
||||
|
||||
;; else
|
||||
(begin
|
||||
(let loop (
|
||||
(start1 0)
|
||||
(i (string-contains s1 s2))
|
||||
)
|
||||
(if i
|
||||
(begin
|
||||
(set! start (- start 1))
|
||||
(if (or
|
||||
(> start 0)
|
||||
(and (> end-after 0)
|
||||
(<= (+ end-after start) 0)
|
||||
)
|
||||
)
|
||||
(string-append
|
||||
(substring s1 start1 i)
|
||||
s2 ;; means: do not change anything
|
||||
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len)))
|
||||
)
|
||||
(string-append
|
||||
(substring s1 start1 i)
|
||||
s3
|
||||
(loop (+ i s2len) (string-contains s1 s2 (+ i s2len)))
|
||||
)
|
||||
)
|
||||
)
|
||||
;; else
|
||||
(substring s1 start1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -338,6 +338,7 @@ gnucash/import-export/ofx/gnc-plugin-ofx.c
|
||||
gnucash/import-export/qif/qif-context.c
|
||||
gnucash/import-export/qif/qif-file.c
|
||||
gnucash/import-export/qif/qif-objects.c
|
||||
gnucash/import-export/qif-imp/.#string.scm
|
||||
gnucash/import-export/qif-imp/assistant-qif-import.c
|
||||
gnucash/import-export/qif-imp/assistant-qif-import.glade
|
||||
gnucash/import-export/qif-imp/dialog-account-picker.c
|
||||
|
Loading…
Reference in New Issue
Block a user