• Login
Community
  • Login

Text Field Seperator

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
7 Posts 4 Posters 45.0k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A
    A2020
    last edited by May 19, 2016, 11:48 PM

    Hi,

    How can I make vertical field separator (lets say every 8 characters) like the “Tabs” but starting from top and going all the way down to the bottom of the text file?

    Thank you!

    1 Reply Last reply Reply Quote 0
    • N
      Nicolas-
      last edited by May 20, 2016, 10:09 AM

      Maybe doing a macro is a good idea ?

      1 Reply Last reply Reply Quote 0
      • G
        guy038
        last edited by guy038 May 22, 2016, 1:08 AM May 21, 2016, 4:36 PM

        Hi A2020,

        Again, a regular expression seems to be the nice solution !!

        So, follow the steps, below :

        • Place your cursor at the beginning of the text to separate ( I chose the | character as separator ! )

        • Open the Replace dialog ( CTRL + H )

        • Set the Regular expression search mode

        • Uncheck, preferably, the Wrap around option

        • In the Replace with zone, type the simple regex $0|

        Now, from an original example text, below :

        1234567812345678123456781
        
        12345678123456781234
        12345678123456781234567
        

        • If you would like this kind of resulting text :

          12345678|12345678|12345678|1

          12345678|12345678|1234
          12345678|12345678|1234567

        Type, in the Find what zone, the regex (?-s).{8}

        Note :

        ONLY, standard characters are counted, in order to reach a 8-characters string !


        • If you would like this kind of resulting text :

          12345678|12345678|12345678|1

          123|45678123|45678123|4
          12345|67812345|67812345|67

        Type, in the Find what zone, the regex (?s).{8}

        Note :

        In that second case, we count the two Windows End of Line characters ( \r and \n ), as part of the 8 needed characters !


        • If you would like this kind of resulting text :

          12345678|12345678|12345678|1

          1234567|81234567|81234
          123|45678123|45678123|4567

        Type, in the Find what zone, the regex :

        .{8}|.{7}\R+.{1}|.{6}\R+.{2}|.{5}\R+.{3}|.{4}\R+.{4}|.{3}\R+.{5}|.{2}\R+.{6}|.{1}\R+.{7}

        Note :

        Like in the first case, the End of Line characters are NOT taken in account. However, this time, the counting process goes on, through the multiples lines crossed !

        Remark :

        Of course, in these regexes :

        • The quantifier {n} can contain any other integer than the 8 digit

        • In each alternative .{n}\R+.{m}, of the 3rd regex, the sum n + m represents the total of characters needed, before the separator character added

        Best Regards,

        guy038

        1 Reply Last reply Reply Quote 0
        • A
          A2020
          last edited by May 26, 2016, 11:43 PM

          Thanks for all your comments but I don’t want to actually separate the texts!,… just need an indicator to show me where I am,… please see the example below:
          https://drive.google.com/file/d/0Bye-nObSi7obaC1CaHhNVEN4aGs/view?usp=sharing

          Thanks again.

          1 Reply Last reply Reply Quote 0
          • D
            dail
            last edited by May 27, 2016, 2:35 AM

            Something like that isn’t quite possible. There is a single edge line that can be set but Scintilla (the part of Notepad++ that handles the text) doesn’t support multiple lines.

            However with a plugin you could do something like set the background alternating between two colors (e.g. a light grey and dark grey) every 8 characters. Not exactly what you want but may be sufficient.

            1 Reply Last reply Reply Quote 0
            • A
              A2020
              last edited by May 27, 2016, 10:23 PM

              Actually I think the plug in would work for me just as you described it, could you please let me know its name or where I can find it,…?

              Thank you.

              1 Reply Last reply Reply Quote 0
              • D
                dail
                last edited by dail May 28, 2016, 8:27 PM May 28, 2016, 6:25 PM

                Nothing exists (existed?) that does it. However I wrote a quick piece of Lua to do it. I can’t say the columns are that pretty but this is as close as you will probably get to indicating columns based on width.

                1. Download the LuaScript plugin
                2. Extract the zip and copy the DLL to your plugins directory
                3. Select Plugins > LuaScript > Edit Startup Script
                4. Paste the chunk of code (See end of this post)
                5. Edit the first few lines of of the code to do what you want (you’ll probably just need to set the file extensions you want)
                6. Save and restart Notepad++
                7. Open one of your files

                Again, it isn’t the prettiest but there’s really nothing else I know of that will do what you want. Adjusting colors may help. For example…

                The code…

                -- Configure things here...
                local registeredExtensions = {".csv", ".xyz"}
                local columWidth = 8
                local col1Color = 0xd0d0d0
                local col2Color = 0xaaaaaa
                
                
                local field_indic = {12, 13} -- not sure what one is best to use but this works
                local function setupEditor(e)
                	e.IndicStyle[field_indic[1]] = INDIC_STRAIGHTBOX
                	e.IndicStyle[field_indic[2]] = INDIC_STRAIGHTBOX
                	e.IndicUnder[field_indic[1]] = true
                	e.IndicUnder[field_indic[2]] = true
                	e.IndicAlpha[field_indic[1]] = 255
                	e.IndicAlpha[field_indic[2]] = 255
                	e.IndicFore[field_indic[1]] = col1Color -- Color of first column
                	e.IndicFore[field_indic[2]] = col2Color -- Color of second column
                end
                
                setupEditor(editor1)
                setupEditor(editor2)
                
                function highlightColumns()
                	local function getLineRangeOnScreen()
                		local firstLine = editor.FirstVisibleLine
                		local lastLine = firstLine + editor.LinesOnScreen
                		return firstLine, lastLine
                	end
                
                	local function getRangeOnScreen()
                		local firstLine, lastLine = getLineRangeOnScreen()
                		local startPos = editor:PositionFromLine(firstLine)
                		local endPos = editor.LineEndPosition[lastLine]
                		return startPos, endPos
                	end
                	local function clearIndicatorOnScreen()
                		local s, e = getRangeOnScreen()
                		editor:IndicatorClearRange(s, e - s)
                	end
                
                	-- Clear everything
                	editor.IndicatorCurrent = field_indic[1]
                	clearIndicatorOnScreen()
                	editor.IndicatorCurrent = field_indic[2]
                	clearIndicatorOnScreen()
                
                	local s, e = getLineRangeOnScreen()
                	for i=s,e do
                		local index = 0
                		local lineStart = editor:PositionFromLine(i)
                		local lineEnd = editor.LineEndPosition[i]
                		for p=0,editor:LineLength(i),columWidth do
                			editor.IndicatorCurrent = field_indic[(index % 2) + 1]
                			local col1 = editor:FindColumn(i, p)
                			local col2 = editor:FindColumn(i, p + columWidth)
                			editor:IndicatorFillRange(col1, col2 - col1)
                			index = index + 1
                		end
                	end
                end
                
                npp.AddEventHandler("OnSwitchFile", function(filename, bufferid)
                	-- Always remove it
                	npp.RemoveEventHandler("OnUpdateUI", highlightColumns)
                
                	-- Check to see if the extension exists
                	for _,v in pairs(registeredExtensions) do
                	  if v == npp:GetExtPart() then
                		npp.AddEventHandler("OnUpdateUI", highlightColumns)
                		return
                	  end
                	end
                end)
                
                
                1 Reply Last reply Reply Quote 0
                4 out of 7
                • First post
                  4/7
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors