From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.help Subject: Re: bulk replacement on region, buffer, file? Date: Thu, 10 Dec 2015 04:21:43 +0100 Message-ID: <87vb873s54.fsf@debian.uxu> References: <87vb87t55n.fsf@pobox.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1449717103 30745 80.91.229.3 (10 Dec 2015 03:11:43 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 10 Dec 2015 03:11:43 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Dec 10 04:11:33 2015 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1a6rdk-0000dr-HN for geh-help-gnu-emacs@m.gmane.org; Thu, 10 Dec 2015 04:11:32 +0100 Original-Received: from localhost ([::1]:39073 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a6rdj-0004iP-IZ for geh-help-gnu-emacs@m.gmane.org; Wed, 09 Dec 2015 22:11:31 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:37374) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a6rdY-0004i5-Jx for help-gnu-emacs@gnu.org; Wed, 09 Dec 2015 22:11:21 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a6rdT-0000vM-Jj for help-gnu-emacs@gnu.org; Wed, 09 Dec 2015 22:11:20 -0500 Original-Received: from plane.gmane.org ([80.91.229.3]:44783) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a6rdT-0000u9-CH for help-gnu-emacs@gnu.org; Wed, 09 Dec 2015 22:11:15 -0500 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1a6rdO-0008JF-RO for help-gnu-emacs@gnu.org; Thu, 10 Dec 2015 04:11:10 +0100 Original-Received: from nl106-137-244.student.uu.se ([130.243.137.244]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 10 Dec 2015 04:11:10 +0100 Original-Received: from embe8573 by nl106-137-244.student.uu.se with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 10 Dec 2015 04:11:10 +0100 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Original-Lines: 56 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: nl106-137-244.student.uu.se Mail-Copies-To: never User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) Cancel-Lock: sha1:vBhWB7xxPdQyHu3OOFoWa+hT3pc= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:108349 Archived-At: Tom Roche writes: > I would appreciate pointers to code that enables > "bulk replacement" of numerous string tuples > ({to-replace, replace-with}) in a single call. > What I mean, why I ask: > > I frequently scrape blocks of text from PDFs into > Emacs text buffers. After I do so, I usually want to > replace lots of strings in the buffer. E.g. (using > '|' to delimit the strings), > > |CO 2| -> |CO2| > |- | -> || > |“| -> |"| > |”| -> |"| > |[weird unicodes used for bulleting]| -> |*| I hear you - everything is fair in the struggle against those goofy chars! Down with unicode! (Except: putting them as a quote when they aren't!) Aaanyway... Probably best way is to use set functions - another good way tho is recursion. And I'm not just saying that... (defun replace-strings (tuple-list) (when tuple-list (let*((tuple (car tuple-list)) (rest (cdr tuple-list)) (replace-match (car tuple)) (replace-string (cadr tuple)) ) (goto-char (point-min)) (while (re-search-forward replace-match (point-max) t) ; NOERROR (replace-match replace-string) ) (replace-strings rest) ))) ;; Eval this to fix the below typos: (replace-strings '(("Robb Hall" "Rob Hall") ("Scott Ficsher" "Scott Fischer") )) ;; Robb Hall ;; ;; Scott Ficsher ;; ;; Robb Hall ;; ;; Scott Ficsher -- underground experts united http://user.it.uu.se/~embe8573