Wednesday, July 13, 2016

Re: substitute last space with char

On Wednesday, July 13, 2016 at 12:22:05 PM UTC-7, Tim Chase wrote:
> On 2016-07-13 11:53, Bee wrote:
> > On Wednesday, July 13, 2016 at 10:54:03 AM UTC-7, Tim Chase wrote:
> > > On 2016-07-13 10:35, Bee wrote:
> > > > I would like to replace the last occurrence of a space in a line
> > > > with a ';'.
> > > >
> > > > I know I can use:
> > > > g_ " goto last non-blank char in line
> > > > F " find the preceeding ' '
> > > > r; " replace with ';'
> > > >
> > > > How would this be done with :substitute ?
> > >
> > > A couple possibilities come to mind:
> > >
> > > :%s/ \ze\S*$/;
> > > :%s/.*\zs /;
> > > :%s/\(.*\) \(.*\)/\1;\2
> >
> > How can it be done with the string in a register?
>
> For which part? The thing being searched/replaced over, the search
> regex, or the replacement?
>
> For the thing you're searching/replacing over, you'll want something
> like [UNTESTED]
>
> :let @a=substitute(@a, '.*\zs ', ';', '')
>
> For the replacement ("I want something other than a ';' as my
> replacement"), use
>
> :%s/.*\s /\=@a
>
> -tim

After I asked I came up with same as you did.

:let @a=substitute(@a,'.*\zs ',';','')

Tested and it works.
Saves several steps editing in a register.

I am converting a spreadsheet with many tabs into a form to import into a database. The tabs have event names and dates, but that info is not in the each sheet. Each sheet is exported as a text file, the filename has the event name and date. The following will add that info to the beginning of each line of the exported sheets. Later all files will be concatenated and imported to a database. Tested individually, later in a function. ";" is being used as the field separator.

:g/^\d*;\+$/d " remove blank records
:v/^\d\+;/d " remove records without leading number and ;
:let @a=expand('%:t:r') " filename without path and extension
:let @a=substitute(@a,'\s*$','','') " remove any trailing whitespace
:let @a=substitute(@a,'.*\zs ',';','') " replace ' ' with ';' before date
:let @a=@a.";" " append ';' to filename;date
:g/^\d\+;/:normal "aP " prefix lines with filename;date;

Bill

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: