Page break Text File saving
-
Thanks. I need to save the files automatically based on page break. For example my text file contains 1000 lines and approximately every 100 th line has FF. so i need to save 10 or 9 individual text files based on this FF(like starts after FF and ends before FF) automatically. Naming as you mentioned taking 8 letters after FF is good enough. PDF conversion asked for the same purpose only. If pdf is offtopic no problem. My aim is to save single text file to Multiple text file based on normal page break FF.
If Macro is the only option then please Explain little bit in detail. -
@Ohm-Dios said in Page break Text File saving:
For example my text file contains 1000 lines and approximately every 100 th line has FF. so i need to save 10 or 9 individual text files based on this FF
A macro is just the sequence of keyboard commands saved so it can be run over and over again. As you refer to a single file with perhaps 10 page breaks creating macros is possibly unnecessary. If however you need to perform the same steps over and over again on lots of files over a period of time then macros are the way to go.
I’ve been doing some tests and it appears it’s not possible to name each file containing 1 section of the big file based on text within the file, at least when using the macro method. I have a method to get around this, which will work when recorded as a macro.
The work I have done is on my work PC which means a wait of about 14hrs before I can provide it.
If however you want something to try earlier I’ll see if I can provide it now.- Use the Find function with the regex (Regular expression)
Find What:(?s)\A(.+?FF)
Search mode must be regular expression. Click on the “Find Next” button. It will highlight from the start of the file until the first page break. - You can close the Find Window, then select “Cut” from the Edit menu.
- From the File menu, select New which creates a new Tab. You can then “Paste” which is under the Edit menu.
- If you want to remove the page break then use the “Replace” function and use
Find What:FF
Replace With: leave this field empty. Search mode must be regular expression and click on Replace, or replace all. As there is only 1 in this section the result is that it is removed. - Now you can save the tab as a real file. So if doing this manually you can name this file as you save. Then close this file and you will be back at the “big” file.
Now you just need to repeat steps 1 - 5 for the 10 or so page break sections.
So tomorrow I can read any replies you post and we can take it from there, either going the way of macros or what ever else you might need help with.
Terry
- Use the Find function with the regex (Regular expression)
-
I would say a scripting plugin and writing some code is the way to go with this, especially if you have a lot of files or this is more than a one-time need. Please advise on this, and if desired, we can get you started on this kind of path.
-
Yes, Few big files each file has approximately 400 pages means, 400 individual text file to be saved. As mentioned previous post Macro works but i have to do for each and every single page (macro takes the job of finding,cutting,putting it to new file for saving i have to enter the file name). When its selected for end of line to repeat it just takes first page and also if i enter the no of times manually , that too takes only first page and copies the same.
-
It appears that it has been done before.
The script HERE demonstrates how to split a file based upon an original file’s empty lines.
If you can see how the script works, you should be able to create your specificline_delim_regex
for your situation.
Let us know what additional help you need – I anticipate some. :-) -
Hello, @ohm-dios, @terry-r, @alan-kilborn and All,
An easy way to get to split a file into multiples ones , according to some conditions, is to use the
gawk
software.-
First dowload the
.exe
from https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/gnu-on-windows/gawk-4.1.0-bin.zip -
Create a
gawk
folder on your desktop -
Extract
gawk.exe
in this folder (223,246
bytes only ) -
Move your file to split in this folder, too
-
Open a
DOS
command-line windows -
Move to the new
gawk
folder wiht acd
command -
Type the command
gawk "BEGIN { n=1 } !/\x0C/ { f = \"File_\"n\".txt\" ; print > f } /\x0C/ { n++ }" Your_File.txt
-
Valid with the
Enter
key
=> After several seconds, you should get as many files, named
File_1.txt
,File_2.txt
,File_3.txt, ....
in folder Gawk, as the number ofFF
characters (\x0C
) in the fileYour_File.txt
Note that this action does not change your initial file !
Of course, change the name
Your_File.txt
to the real name of your file which must be splittedBest Regards
guy038
-
-
Grumble grumble…solutions outside N++/plugins, before inside solutions are deemed “insufficient”. Grumble grumble… :-)
Another thing just occurred to me: Does OP expect
FF
to be at the end of each of the newly-created files, or are they purely delimiters that don’t appear? Since “formfeed” is in it, my guess would be that FF needs to be retained. -
Hello, @ohm-dios, @terry-r, @alan-kilborn and All,
Alan, I hesitated to provide that solution because I knew you’d be annoyed because it’s outside N++ /plugins ;-))
Like a little boy, I say: I promise, Mom, I won’t do it again !
However, I’ve just found a much more quicker method :
gawk "BEGIN { n=1 ; f = \"File_1.txt\" } !/\x0C/ { print > f } /\x0C/ { n++ ; f = \"File_\"n\".txt\" }" Your_File.txt
And, as @alan-kilborn said, @ohm-dios, if you need to keep the
FF
character at the end of each created file, run that command, instead :gawk "BEGIN { n=1 ; f = \"File_1.txt\" } !/\x0C/ { print > f } /\x0C/ { print > f ; n++ ; f = \"File_\"n\".txt\" }" Your_File.txt
Cheers,
guy038
-
@guy038
Hi I bow my head for your helping mind . It works like a charm. I love you so much. Thanks again to guy 038.
Thanks to Alan Kilborn for Pointing out FF. and Terry R for Macro guidance and Notepad++ community. -
@Ohm-Dios said in Page break Text File saving:
As mentioned previous post Macro works but i have to do for each and every single page (macro takes the job of finding,cutting,putting it to new file for saving i have to enter the file name). When its selected for end of line to repeat it just takes first page and also if i enter the no of times manually , that too takes only first page and copies the same.
It’s good that you have a solution that works for you. I didn’t explain myself very clearly obviously as per your statement above.
If going with my macro idea you would not have needed to name each file created. I just mentioned that as you stated you had 1 medium sized file with perhaps 10 or so sections and the solution I then proposed would have been a manual one, no macros involved.
However with the addition of the statement “400 pages from a few big files” the macro idea would have made it easier. Most of the time we provide solutions for a “one off” issue or at most needed for a few small number of instances. Macro’s only come into play when the process needs repeating lots of time as it does involve some extra steps which are often considered too much extra work.
My steps were to be:
- First macro creates the appropriate number of empty tabs, Notepad++ will create the tabs called “new 1”, “new 2”, “new 3” and so on.
- Second macro cuts the first portion from the large file and inserts it into the “new 1” file, then saves and closes. The name of each file here would have been the “new 1”, “new 2” etc.
- Macro then goes back to the original file (which is now shorter by the first section being removed). It then repeats step #2, so at this point the first section in the file is actually the 2nd of the original file.
There were still some testing to be done, but I had it fairly close to being a solution, and yes it was looking like being an automatic solution. The main work would have taken place at the start to get the macro’s recorded and initial setup.
Terry
-
It seems the macro solution had some interesting aspects.
Maybe you want to carry it through and publish the workings?
If it seems to you a pointless effort at this point, because the OP has a solution, then it’s OK, don’t feel obligated. :-) -
@Alan-Kilborn said in Page break Text File saving:
@Terry-R
It seems the macro solution had some interesting aspects.I wouldn’t necessarily say interesting, actually all the steps were fairly simple. However I’ve hit a snag, and it’s a big one.
When I create the multiple “new #” files (step 1), these files ONLY exist within the NPP environment, they aren’t actual files on disk. So when I use the step to save them, the filename is pre-populated with the tab name (good so far), but the macro does not proceed past this point, instead stopping when the Save As dialog is open, it has to be “Save As” due to file not currently on disk, 1st time to save. So my “automatic” process has broken down.
I recall another solution I had where I did a similar thing, appending the filename (as the tab header shows) as text on the last line to each file loaded. But those files already existed on disk, so the save and close functions worked without any user interaction.
I’ve been searching this forum for articles where mention has been made about editing the macro manually and inserting codes corresponding to button presses or commands, where they will work but aren’t record-able through the normal process, @PeterJones this is where you join in, because you seem to have a very good handle on how to find these codes. I installed NppUISpy plugin, but that doesn’t help here.
So either I need to pre-save these “new #” files before commencing the cut and paste operation or be able to have the macro proceed past the Save As dialog box with the default name in situ.
Any ideas anyone?
Terry
-
@Terry-R said in Page break Text File saving:
I wouldn’t necessarily say interesting… However I’ve hit a snag…
Yep, it is a snag I anticipated from the earlier description.
I thought you had found a solution to it, based on your earlier posting describing the algorithm.
THAT is what I thought could be interesting. :-)Macros sometimes just don’t seem to go “far enough”.
Perhaps that’s why I’m a rather avid scripter.I’ve often started something as a macro, then hit the “how to save-as the file” problem.
It might be nice if thesParam
on the SaveAs action could be used somehow to:- specify a hard filename, or perhaps:
- specify a suffix for the active file, to use when saving the new file (example: an active file of
c:\test\test2.txt
becomesc:\test\test2_mysuffix.txt
- if
sParam
is empty, e.g.sParam=""
then current behavior (open SaveAs and put current file info into the setup of the dialog) is maintained - DISCLAIMER: don’t know that I’ve fully thought this all through :-)
-
@Terry-R said in Page break Text File saving:
I’ve been searching this forum for articles where mention has been made about editing the macro manually and inserting codes corresponding to button presses or commands, where they will work but aren’t record-able through the normal process, @PeterJones this is where you join in, because you seem to have a very good handle on how to find these codes. I installed NppUISpy plugin, but that doesn’t help here.
Well, with the Save As (
41008
, from NppUISpy), it is not recordable, but it is playable. Last August, I shared a macro that did a New, then changed the file-type, then ran Save As, then edited and saved again, proving that you can move beyond Save As. Editing it for creating three new files and three save-as (and commenting using on Alan’s2172
trick so that comments don’t get lost):<Macro name="CreateThreeSaveAsEach" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="0" message="2172" wParam="0" lParam="0" sParam="COMMENT: 41001 = File|New" /> <Action type="2" message="0" wParam="41001" lParam="0" sParam="" /> <Action type="0" message="2172" wParam="0" lParam="0" sParam="COMMENT: 41008 = Save|As" /> <Action type="2" message="0" wParam="41008" lParam="0" sParam="" /> <Action type="0" message="2172" wParam="0" lParam="0" sParam="COMMENT: 41001 = File|New" /> <Action type="2" message="0" wParam="41001" lParam="0" sParam="" /> <Action type="0" message="2172" wParam="0" lParam="0" sParam="COMMENT: 41008 = Save|As" /> <Action type="2" message="0" wParam="41008" lParam="0" sParam="" /> <Action type="0" message="2172" wParam="0" lParam="0" sParam="COMMENT: 41001 = File|New" /> <Action type="2" message="0" wParam="41001" lParam="0" sParam="" /> <Action type="0" message="2172" wParam="0" lParam="0" sParam="COMMENT: 41008 = Save|As" /> <Action type="2" message="0" wParam="41008" lParam="0" sParam="" /> </Macro>
This creates a file, runs Save As, waits for me to enter the name in the dialog manually, and does the same thing twice more, for a total of three files.
No, I do not know of a way to pass a name to the Save As command – and using the type2 “menu command” style of command, it’s not going to be possible, because menu commands are, by definition, a single-click action; they are not set up to receive arguments directly.
However, I just had an idea. Let me go run some experiments, and I’ll hopefully be back with another post soon, if it pans out.
-
@PeterJones said in Page break Text File saving:
However, I just had an idea. Let me go run some experiments
I was hoping to use the Notepad++ message NPPM_SAVECURRENTFILEAS, which has a string lParam internally… but the type=0/1 macro commands only send messages to the current Scintilla window, not to the parent Notepad++ window; and the type=2 macro commands only send menu command IDs, not generic messages.
So, from a macro, I still don’t know any way to specify the Save As name. As with Alan, I think this task is better suited to a scripting plugin than a macro.
-
@PeterJones said in Page break Text File saving:
So, from a macro, I still don’t know any way to specify the Save As name.
Thanks for the research. In your post there was a glimmer of hope in that I have the filename already populated. That comes from the tab name “new 1” etc. So I changed the 41006 to 41008 to see if it made a difference, nope!
What’s interesting is that when I recorded the macro I used the “Save” function (41006, and this was in the macro). However what comes up is the “Save As” because obviously the file has never been created on disk.
I thought it would be a long shot as your post referred to be unable to supply a filename, but surely every tab content that you try to save should have a “tab name” which should become the “filename” by default. So wouldn’t the filename field in the Save/Save As dialog box be filled with the default?
So it’s a bust then. Oh well it was an interesting exercise anyways although not terribly complicated. I only attempted this due to my previous foray into macro’s saving a filename (as text) in the file content, updating and closing it which DID work. I thought I was onto a winner!
Cheers
Terry -
@Terry-R said in Page break Text File saving:
I only attempted this due to my previous foray into macro’s saving a filename (as text) in the file content, updating and closing it which DID work
Do you still have that macro? Because I don’t see how you could do that, either.
-
This post is deleted! -
@PeterJones said in Page break Text File saving:
Do you still have that macro? Because I don’t see how you could do that, either.
Sorry, misunderstood question, thought you meant this macro, not the old one. Look here for that:
https://community.notepad-plus-plus.org/topic/17035/batch-function-need-to-add-filename-at-the-end-of-each-paragraph/5Terry
PS you even upvoted me on it
-
@Terry-R said in Page break Text File saving:
but surely every tab content that you try to save should have a “tab name” which should become the “filename” by default. So wouldn’t the filename field in the Save/Save As dialog box be filled with the default?
This IS what happens, whether an as-yet-unsaved-to-disk file has a default name (e.g. “new 1”, “new 4”, etc.) or you’ve right-clicked a “new X” tab and Rename…'d it to something else, e.g. “zzzz”:
However, it feels like I am missing some point in the discussion.
¯\_(ツ)_/¯