Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: How to replace Tab with spaces not altering postion

by petral (Curate)
on Oct 10, 2002 at 15:11 UTC ( #204199=note: print w/ replies, xml ) Need Help??


in reply to How to replace Tab with spaces not altering postion

> perldoc -q tabs Found in /usr/local/lib/perl5/5.6.1/pod/perlfaq4.pod How do I expand tabs in a string? You can do it yourself: 1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e; Or you can just use the Text::Tabs module (part of the standard +perl distribution). use Text::Tabs; @expanded_lines = expand(@lines_with_tabs); >
and this from perlop:
Occasionally, you can't use just a `/g' to get all the changes to occur that you might want. Here are two common cases: # put commas in the right places in an integer 1 while s/(\d)(\d\d\d)(?!\d)/$1,$2/g; # expand tabs to 8-column spacing 1 while s/\t+/' ' x (length($&)*8 - length($`)%8)/e;
And this has been in the perl man page since perl1!
print "\et" x ($tab/8), ' ' x ($tab%8); # tab over


  p


Comment on Re: How to replace Tab with spaces not altering postion
Select or Download Code
Re^2: How to replace Tab with spaces not altering postion
by Aristotle (Chancellor) on Oct 11, 2002 at 21:45 UTC

    The problem is it's using $` which incurs a huge performance penalty.

    Here's another OWTDI:

    $_ = join "", map { $_ . " " x (8 - length() % 8) } split /\t/, $_, -1;
    Update: blakem points out that this code is broken. It will pad all parts of the string to a multiple of 8, including the last one. Getting it not to is disappointingly awkward..
    $_ = join "", do { my @bits = split /\t/, $_, -1; (map { $_ . " " x (8 - length() % 8) } @bits[0..$#bits-1]), $bits[ +-1] };
    (Update is untested.)

    Makeshifts last the longest.

      join "", map{ $_ . (/\n/ ? "" : " " x (8 - length() & 7)) } split /\t/
      ?

        p
        $_ = "You\tare\tmaking\ttoo\tmany\tassumptions...";

        Makeshifts last the longest.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://204199]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (4)
As of 2014-08-30 22:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls