[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 01/03: Add string-replace-substring to (ice-9 string-fun
From: |
Daniel Llorens |
Subject: |
[Guile-commits] 01/03: Add string-replace-substring to (ice-9 string-fun) |
Date: |
Fri, 20 Dec 2019 07:21:23 -0500 (EST) |
lloda pushed a commit to branch wip-exception-truncate
in repository guile.
commit cf5b4a1db8ad4c1060f08f07113791dd34374266
Author: Daniel Llorens <address@hidden>
Date: Fri Dec 20 12:53:34 2019 +0100
Add string-replace-substring to (ice-9 string-fun)
---
module/ice-9/string-fun.scm | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/module/ice-9/string-fun.scm b/module/ice-9/string-fun.scm
index c27ff84..bef841d 100644
--- a/module/ice-9/string-fun.scm
+++ b/module/ice-9/string-fun.scm
@@ -25,7 +25,8 @@
separate-fields-discarding-char separate-fields-after-char
separate-fields-before-char string-prefix-predicate string-prefix=?
sans-surrounding-whitespace sans-trailing-whitespace
- sans-leading-whitespace sans-final-newline has-trailing-newline?))
+ sans-leading-whitespace sans-final-newline has-trailing-newline?
+ string-replace-substring))
;;;;
;;;
@@ -278,3 +279,25 @@
;;; (fail parts)
;;; (apply return parts))))
+
+
+;;; {String Fun: string-replace-substring}
+;;;
+
+;; By A. Wingo in
https://lists.gnu.org/archive/html/guile-devel/2014-03/msg00058.html
+
+(define (string-replace-substring s substring replacement)
+ "Replace every instance of @var{substring} in string @var{s} by
@var{replacement}."
+ (let ((sublen (string-length substring)))
+ (with-output-to-string
+ (lambda ()
+ (let lp ((start 0))
+ (cond
+ ((string-contains s substring start)
+ => (lambda (end)
+ (display (substring/shared s start end))
+ (display replacement)
+ (lp (+ end sublen))))
+ (else
+ (display (substring/shared s start)))))))))
+