On 23 Feb 2006 06:44:36 -0800, "gene tani" <[EMAIL PROTECTED]> wrote:

>
>gene tani wrote:
>> Franz Steinhaeusler wrote:
>> >
>> > Who can help me (regular expression, which works for both cases).
>>
>> universal newlines:
>> http://www.python.org/doc/2.3.3/whatsnew/node7.html
>> http://mail.python.org/pipermail/python-list/2006-February/324410.html
>
>if multiple end-of line markers are present (\r, \r\n and or \n), use
>the file's newlines attribute to see what they are.  I think the thread
>linked above touched on that.  Otherwise newlines (or os.linesep)
>should tell you what end of line is in that file.
>
>http://docs.python.org/lib/bltin-file-objects.html

Thank you for your info.

I need it for a file, whose line endings I don't know.

I wrote for DrPython this script:
(using styled text control and wxPython) and this works,
but I'm looking for a shorter way:

===================================================================
#drscript
#RemoveTrailingWhitespaces

import re
import string

eol = DrDocument.GetEndOfLineCharacter()
regex = re.compile('\s+' + eol, re.MULTILINE)

relewin = re.compile('\r\n', re.M)
releunix = re.compile('[^\r]\n', re.M)
relemac = re.compile('\r[^\n]', re.M)

text = DrDocument.GetText()

#check line endings
win = unix = mac = 0
if relewin.search(text):
        win = 1
if releunix.search(text):
        unix = 1
if relemac.search(text):
        mac = 1
mixed = win + unix + mac

#correct the lineendings before
if mixed > 1:
        wx.MessageDialog(DrFrame, "Line endings mixed", "Remove trailing
Whitespace", wx.ICON_EXCLAMATION).ShowModal()

#ok to remove
else:
        lines = text.split(eol)
        new_lines = []
        nr_lines = 0
        nr_clines = 0
        first_cline = -1
        for line in lines:
                nr_lines += 1
                result = regex.search(line + eol)
                if result != None:
                        end = result.start()
                        nr_clines += 1
                        if first_cline == -1:
                                first_cline = nr_lines
                        new_lines.append (line [:end])
                else:
                        new_lines.append(line)

        #file has trailing whitespaces
        if nr_clines > 0:
                d = wx.MessageDialog(DrFrame, "%d of %d lines have trailing
whitespaces (First:%d)\nCorrect?" % (nr_clines, nr_lines, first_cline),
\
                        "Remove trailing Whitespace", wx.OK | wx.CANCEL |
wx.ICON_QUESTION)
                answer = d.ShowModal()
                d.Destroy()
                if (answer == wx.ID_OK):
                        newtext = string.join(new_lines, eol)
                        #save current line
                        curline = DrDocument.GetCurrentLine()
                        DrDocument.SetText(newtext)
                        #jump to saved current line
                        DrDocument.GotoLine(curline)

        #no need to change the file
        else:
                wx.MessageDialog(DrFrame, "File ok!", "Remove trailing 
Whitespace",
wx.ICON_EXCLAMATION).ShowModal()

===========================================================================
-- 
Franz Steinhaeusler
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to