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.
    • A2020A
      A2020
      last edited by

      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
      • Nicolas-N
        Nicolas-
        last edited by

        Maybe doing a macro is a good idea ?

        1 Reply Last reply Reply Quote 0
        • guy038G
          guy038
          last edited by guy038

          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
          • A2020A
            A2020
            last edited by

            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
            • dailD
              dail
              last edited by

              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
              • A2020A
                A2020
                last edited by

                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
                • dailD
                  dail
                  last edited by dail

                  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
                  • First post
                    Last post
                  The Community of users of the Notepad++ text editor.
                  Powered by NodeBB | Contributors