GURU NEEDED - Stripping, reformatting, saving HTML...
-
Hello everybody! Gabriele posting here for the first time.
I have a huge txt file with product descriptions I need for my online store that I’d like to export in separate HTML file after after being stripped from a bunch of other text I don’t need.
I post screenshots of the BEFORE and AFTER and also the link to a ZIP file with the source and destination files in txt and html.
I’d like the exported file to carry the CR and line breaks to the HTML so that I can have that very same formatting as shown in the destination.Screenshots:
-
FINAL RESULT on store (after import)
Files:
SOURCE
DESTINATION TXT
DESTINATION HTML FORMATI thank you all very much in advance!
G -
Hello Gabriele,
After two hours about, I succeeded to create the right Search/Replacement, with regular expressions, in order to change your source text into the HTML destination text :-) Quite tricky, indeed !
The main ideas, which are used, are :
-
All the lines, searched, are ENTIRE lines, with their EOL character(s).
-
Search, first, for a line containing the string CC1, followed by other stuff, which is to be modified OR for a ENTIRE line, which is to be deleted.
-
The string to keep, in each line, begins at the first non blank character, after the regex
.*CC1 +\d+ +and ends at the last non blank character, before any range of ending spaces… -
For the line, containing CC1, search for the following number 1 or 22, to identify if it"s the first or the last line to change ( We must add
<p>, before the first #1 line and</p>\r\n\r\n<p style="text-......"....</p>after the last #22 line. -
Try to match, after the other lines (#2 to #21), any following line(s) containing, at least, 70 spaces, that represent(s) the end of a paragraph ( In that case, we must add, at the end of the "standard" line,
</p>\r\n\r\n</p>, or ELSE,<br />\r\n). -
As usual, in search part, the
\Rsyntax represents any EOL character(s) of a line (\r\n, in a Windows file,\n, in an Unix/OSX file or\r, in an Old Mac file ). -
In the replacement part, we use the special
(?nxxx:yyy)syntax, which re-writes the string xxx if the groupnwas matched and re-writes the string yyy, if groupnwas NOT matched.
So, follow the few steps below :
-
Open your source text in a new tab of N++
-
Open the Replace dialog ( CTRL + H )
-
In the Find what zone, type
(?-s).*CC1 +((1)|(22)|\d+) +(.+[^ ]) +\R(.+ {70,}.*\R)*|(.*(\R|\z)) -
In the Replace with zone, type
(?6:(?2<p>)\4(?3</p>\r\n\r\n<p style="text-align\:right"> </p>\r\n:(?5</p>\r\n\r\n<\p>:<br />\r\n))) -
Select the Regular expression search mode
-
Finally, click on the Replace All button
Et voilà ! I, exactly, obtained the same text as from your link :
http://rc-santa.com/temp/destination-html.txt
Notes on the
SEARCHregex :-
The
(?-s)syntax forces the dot symbol to represent a standard character only ( not an EOL character ). -
The part
.*CC1matches any string CC1, preceded, from beginning of line, by any standard character. -
The part
+((1)|(22)|\d+) +matches the number 1 or 22 or any OTHER number, surrounded by some blank characters. -
The part
(.+[^ ]) +\Rmatches any range of standard characters, ending by a non blank character, then followed by a non null range of blank characters and the EOL character(s). -
If this first alternative can’t match, the second alternative
(.*(\R|\z)), then, matches any ENTIRE line, with its EOL character(s) OR at the very end of the file. -
The different groups are
-
The group 1,
((1)|(22)|\d+), which represents any number, after the CC1 string. -
The group 2,
(1), which represents the number 1, after the CC1 string. -
The group 3,
(22), which represents the number 22, after the CC1 string. -
The group 4,
(.+[^ ]), which represents the text to rewrite in replacement. -
The group 5,
(.+ {70,}.*\R), which represents any following line, possible, containing, at least, 70 blank characters, with its EOL character(s). -
The group 6,
(.*(\R|\z)), which represents any ENTIRE line, with its EOL character(s) OR located at the very end of the file, which DOESN’T contain the string CC1. -
The group 7,
(\R|\z), which represents some EOL character(s) OR the zero length string match at the very end of the file.
-
Notes on the
REPLACEMENTregex :-
If group 6 is matched,
(?6:, we rewrite nothing ( it’s the text to be deleted ), ELSE : -
If group 2 is matched,
(?2<p>),we re-write <p>. -
Then, in all cases, with
\4, we rewrite the group 4 ( the user text ). -
If group 3 is matched,
(?3</p>\r\n\r\n<p style="text-align\:right"> </p>\r\n, we re-write the last paragraph and the formatting line, with its EOL character(s), ELSE : -
If group 5 is matched,
(?5</p>\r\n\r\n<\p>:<br />\r\n), we re-write the change of paragraphs, with a blank line between. If NOT, we re-write <br />\r\n.
Best Regards,
guy038
P.S. :
To get a first idea about it :
-
Uncheck the View - Word wrap option and set the View - Show Symbol - Show All Characters option
-
Click on the Find button, to notice the different consecutive matches found, once you reached the lines containing the string CC1 !
-
-
Looking forward to be in the office tomorrow to try. :)
I really appreciate the effort man. I Am speechless right now -
Hi, Gabriele,
I slightly change my previous post, in order to match the last line of your source text, which doesn’t have any EOL character. So, I added the
\zassertion, to get the very end of your source file. Otherwise, the last non wanted line, below :AACU1821AAC41821C SC3 24 ir/jl
would have been wrongly rewritten, at the end of your HTML-destination file
Cheers
guy038
-
@guy038 said:
(?6:(?2<p>)\4(?3</p>\r\n\r\n<p style=“text-align:right”> </p>\r\n:(?5</p>\r\n\r\n<\p>:<br />\r\n)))
guy, you are the man!
I ran it and it worked out as you expected, but not as I expected, but it’s my fault. I didn’t explain the job accurately enough.
My destination file has only one product, but the source file contains 3 products. So I need all those :)
Anyway, the file I need to process is huge with 80k+ products so I need your function to process them all. Maybe Notepad++ won’t be able to run it so I’ll have to split the document in several parts, which won’t be a problem.Another mistake I made is not to mention that I need the product code (i.e.: AACR1035) at the beginning of every description block so that I have a reference when I import into DB.
This said, the very best final result would be having a CSV formatted document like THIS ONE
Sorry again for not being very clear and, again, my compliments for such result!
G -
-
Hello Gabriele,
Ah !, as usual, the problem it’s not the regex, itself, but, rather, the full comprehension of what you exactly need !
-
Firstly, when I opened your file destination-2.csv, in Excel, all your text was curiously split in two cells, only : the column A contains, practically, all your text, except for the final tag </p>, which is located in column B, due to the semi-colon of the form
. So, it, normally, acts as a field separator, in a CSV document ! -
Secondly, in column A, after the product code, you begin the text with a double quotes delimiter and end it, in column B, after the
</p>tag, with this same delimiter. However, are you aware that you, already, have such delimiters, in your last formatting line (style="text-align:right") ? -
Thirdly, you said :
My destination file has only one product, but the source file contains 3 products. So I need all those :)
I don’t understand very well what you mean ? Of course, I would never change your source files. Just copy your source file as a destination file. Then process the regex(es) on this destination file only !
-
Fourthly, when you spoke about the product code, you mentioned the value AACR1035, but the complete string is AACR1035AAC11035M. Of course, I saw that the number seems repeated. So, which string would you write in your destination file ?
-
Finally, and the most important, to get a right idea of the process to do, you could send me your file of 80k+ products, if you don’t mind and if it is NOT confidential, of course !. My e-mail address is :
Surely, this file will suggest me some other questions, but we’ll get near to the solution !
BTW, don’t worry about the necessity of splitting your file. I don’t think it’ll be necessary. However, time of processing the final regex S/R, may be important. Anyway, if I succeed to run it on my old XP laptop, it should be OK, on a more recent configuration :-))
Cheers,
guy038
-
-
destination-2.csv
I don’t see where you got this file from. There is only destination.csv on my server. :)
The description you gave me of that file is not as I see it in Notepad++
I’ll send you the file RARed via email. It contains only one line of 2 cells separated by the comma with both values quoted (important) as the descriptions contain commas.“are you aware that you, already, have such delimiters, in your last formatting line?”
No I was not aware. I didn’t pay attention to it. Thanks for noticing it.
So we need to have a different separator, I guess. “|” would be fine. I can use any separator I want so… let’s go for the |The column A contains the product code “AACR1035” (the first part of the code so that AACR1035AAC11035M become “AACR1035” - It’s the important part, the SKU.
“My destination file has only one product, but the source file contains 3 products. So I need all those :)”
Sorry I’ll try again… :) (even thought at this point we don’t need that since we can go for the CSV)
The destination file I provided was just to show you the result of ONE product, but the finale destination file (CSV) need to contain all the products.Here is the link to a part of the complete file. It’s 1/5 of the original.
Here is the complete one.Thanks a lot again!
G -
Gabriele,
Really sorry, but your two links don’t seem to work.
-
The first one, relative to the 1/5 of the original file, doesn’t work at all :-((
-
The second one, relative to the complete file, opens the main page of the R.C… Santa site, but, even after clicking on some links, of this main page, I could not get your RAR archive ?!
BTW, what is the size of your complete file ? May be, you could send me, by e-mail, part of it ( 1/5 or even less )
I did receive your destination.rar file, attached to your e-mail. Thanks. I will probably have to ask you some other questions about it, but first, I would prefer to get your file ( or a subset of it ) in order to have a general idea, about the tasks to do !
Cheers,
guy038
-
-
Here is the link to a part of the complete file. It’s 1/5 of the original.
Here is the complete one.the first link doens’t seem to be saved correctly by the script here on this website.
links sent also via email -
Hi Gabriele,
Yeah ! This time, your links, sent by e-mail, are OK. So, I now get :
-
The technoteCOMPLETE.rar archive, whose I extracted the huge technote.txt file , of 183 Mo !
-
The Technote1.rar archive, whose I extracted the technote1.csv file, of 21,8 Mo
Just note that, in your last post, the link of the partial file is still wrong !
Finally, I think that the right syntax of these two links are, simply :
http://www.rc-santa.com/temp/technote1.rar
http://www.rc-santa.com/temp/technoteCOMPLETE.rar
Well. I’m going to glance to your two huge files !
See you soon,
Cheers
guy038
-
-
“Just note that, in your last post, the link of the partial file is still wrong !”
Yeah… there must be something wrong whit this forum script when parsing URLs. I tried to work on it but after 180 secs you can’t edit anymore so I couldn’t delete the links.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login