• We’re currently investigating an issue related to the forum theme and styling that is impacting page layout and visual formatting. The problem has been identified, and we are actively working on a resolution. There is no impact to user data or functionality, this is strictly a front-end display issue. We’ll post an update once the fix has been deployed. Thanks for your patience while we get this sorted.

Perl question - reversing order of items where number of items varies

IronWing

No Lifer
I have a text file like so:

Bob's House, Smallville, Oregon, USA
Bigtown, New York, USA
Argentina
Ontario, Canada
Nice Beach, Green Lake, Big Province, Poland

Each line holds a separate geographical location, ordered from most specific to country. Commas are used to separate values. All entries have at least the country.

What I want is:
USA, Oregon, Smallville, Bob's House
USA, New York, Bigtown
Argentina
Canada, Ontario
Poland, Big Province, Green Lake, Nice Beach

It's been years since I've done any programming so I'm not sure how to approach this. I can load each line into an array and use the pop function to pull the last value on a line and start building a reversed array for each line in the correct order but I'm trying to figure out how to deal with the fact that there aren't an equal number of values on each line. Perl's the hammer I'm most familiar with. Any ideas?
 
Last edited:
Piece of cake for me to do this in C but it would be pretty crude.

Load each line in a buffer of 4096 or more characters as needed

Increment variable index while checking each character until it encounters '\0'

Then start decrementing index in reverse until comma is encountered. Set that index as value of variable EOL and copy all characters to newstring until '\0' is reached. Copy value of EOL into variable index and start the decrement loop again. Keep doing this over and over until index reaches zero.

So curious question: do all programming languages go through iteration over every memory location for a string when doing operations like this? I mean, I think so but would be interested to know if I'm missing something.
 
So curious question: do all programming languages go through iteration over every memory location for a string when doing operations like this? I mean, I think so but would be interested to know if I'm missing something.
I think it's necessary, if only to read the string and write the string. However you slice it, it's an O(n) problem in characters.
 
Back
Top