Create html <ui> <li> by parsing text file


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Create html <ui> <li> by parsing text file
# 1  
Old 10-25-2019
Create html <ui> <li> by parsing text file

Hi you all,
this is my first post in this forum. I'm italian (please forgive me) :-) so my english will fail to be correct...

Anyway, let's get straight to the point!
I have a text file like this:

Code:
  ,,,,
  Disney: 00961-002,,,,
 ,Pippo: 00531-002,,,
 ,,Pluto: 00238-002,,
 ,,Paperino: 00177-002,,
 ,,,Paperina: 00121-002,
 ,,,,Minnie: 00193-002
 ,,,Paperone: 00434-002,
 ,,,Paperoga: 00956-002,
 ,,Gambadilegno: 00715-002,,
 ,Topolino: 000078-002,,,
 ,,Basettoni: 00000-002,,
 ,,Clarabella: 00163-002,,
 ,,Paperinik: 00511-002,,
  ,,,Orazio: 00133-002,

The number of commas on the first line indicates the number of levels, those before the item indicate its depth, those after the item may be useless. The number after ":" is not relevant and should not be considered.

Well, I would like to parse it with a shell script (on Debian 8) to get as the following:


Code:
  <ul><li><span class="tf-nc">Disney</span>
       <ul><li><span class="tf-nc">Pippo</span>            
           <ul><li><span class="tf-nc">Pluto</span></li>
             <li><span class="tf-nc">Paperino</span>
               <ul> <li><span class="tf-nc">Paperina</span>
                   <ul><li><span class="tf-nc">Minnie</span></li>
                   </ul><li><span class="tf-nc">Paperone</span>
                 <li><span class="tf-nc">Paperoga</span>
                 </li></ul></li></li><li><span class="tf-nc">Gambadilegno</span></li>
           </ul></li><li><span class="tf-nc">Topolino</span>
           <ul><li><span class="tf-nc">Basettoni</span></li>
             <li><span class="tf-nc">Clarabella</span>
             <li><span class="tf-nc">Paperinik</span>             
              <ul><li><span class="tf-nc">Orazio</span></li>
              </ul></li></ul></li></ul></li></ul>

This Html code was written by hand, just to example, but in the real world, the file can contains many many items and many many levels
The final result will be, in a web browser, something like the picture you can see here: albertocortesi dot it / output.jpg


Is there anyone who could give me a little help?
# 2  
Old 10-25-2019
Hi and Welcome,

UNIX.com is not a 'script writing service'. We are here to help you write your own scripts, but you must do your own work and show your on efforts and attempts.

What have you tried? What error messages did you get? What output did you see when you made your own attempt to parse this text?
# 3  
Old 10-26-2019
Quote:
Originally Posted by Neo
Hi and Welcome,

UNIX.com is not a 'script writing service'. We are here to help you write your own scripts, but you must do your own work and show your on efforts and attempts.

What have you tried? What error messages did you get? What output did you see when you made your own attempt to parse this text?

Hi Neo, thanks for the welcome!

Yes, it's pretty obvious that the forum is not a scripting service, and, I assure you, it's not what I need.

I'm completely new to scripting, and I know practically nothing, but I know other programming languages and conceptually I know what I have to do to get the result I want.

What I don't know is where to start, for example, I have no idea how to parse the strings in the file.

I was able to loop through the lines of the file and display them on the console, but for now, nothing more.

Code:
#!/bin/bash
input=$1
while IFS= read -r line
do
  echo "$line"
 done < "$input"

The next step would be to parse, string by string, to understand how many commas there are before the part to be extracted and to use this value to start creating the <ul><li> structure.
# 4  
Old 10-26-2019
After several attempts I was able to split the individual strings of the file in this way:

Code:
#!/bin/bash
input=$1
declare -a FirstStep
N=0

while IFS= read -r line
do
 Res="$(cut -d':' -f1 <<< $line)"
 #echo $Res
 if [ $N -gt 0  ] 
 then 
 FirstStep[N]=$Res
 fi
 let N++
done < "$input"

for i in "${FirstStep[@]}"
do
   :   
   echo $i
done

But now I'm completely stuck and I don't know how to go on. I gladly accept clues or suggestions.
This User Gave Thanks to alcresio For This Post:
# 5  
Old 10-26-2019
The first suggestion I would offer is to always format your HTML (or code) before doing any analysis.

Doing a quick cut, paste and format in Visual Studio Code:

Code:
<ul>
    <li><span class="tf-nc">Disney</span>
        <ul>
            <li><span class="tf-nc">Pippo</span>
                <ul>
                    <li><span class="tf-nc">Pluto</span></li>
                    <li><span class="tf-nc">Paperino</span>
                        <ul>
                            <li><span class="tf-nc">Paperina</span>
                                <ul>
                                    <li><span class="tf-nc">Minnie</span></li>
                                </ul>
                                <li><span class="tf-nc">Paperone</span>
                                    <li><span class="tf-nc">Paperoga</span>
                                    </li>
                        </ul>
                        </li>
                        </li>
                        <li><span class="tf-nc">Gambadilegno</span></li>
                </ul>
                </li>
                <li><span class="tf-nc">Topolino</span>
                    <ul>
                        <li><span class="tf-nc">Basettoni</span></li>
                        <li><span class="tf-nc">Clarabella</span>
                            <li><span class="tf-nc">Paperinik</span>
                                <ul>
                                    <li><span class="tf-nc">Orazio</span></li>
                                </ul>
                            </li>
                    </ul>
                    </li>
        </ul>
        </li>
</ul>

It's a lot easier to see what you are trying to do when formatted properly (easy on the eyes).

Seem to me, at quick glance, your HTML is not correct.

Perhaps use some tool like Visual Studio Code (it's is free, works just fine, well supported) to edit your HTML and make sure your HTML is correct?

In other words, it's a bit early to write a parser to format the HTML when your HTML is not correct in your model / desired HTML, blah blah ....
# 6  
Old 10-26-2019
Yes Neo,
my code works, but it's really ugly! :-)

It was written by hand just to give an idea. The formatting code make clearer the future steps. Tnx!


I stiil working on basics of scripting, May I need some time to learn.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Copy the content from txt file and create a html file

I have a txt file with a list of error messages in a xml tag format, and each error message is separated with a identifier(endresult).Need to split that and copy and create a new html file.Error message has some special character. how to escape the special character and insert my data into the... (7 Replies)
Discussion started by: DevAakash
7 Replies

2. Linux

Parsing - export html table data as .csv file?

Hi all, Is there any out there have a brilliant idea on how to export html table data as .csv or write to txt file with separated comma and also get the filename of link from every table and put one line per rows each table. Please see the attached html and PNG of what it looks like. ... (7 Replies)
Discussion started by: lxdorney
7 Replies

3. Shell Programming and Scripting

awk parsing file to create a database

Hi Guys, I have a list a hotels stored in many different text files. This list is kept in the following format: 20/03 Hotel: The Bear Hotel Honey Street Woodstock UK Tel:+44-xxxxxx Rate: 100 21/03 Hotel: The Bush Hotel Nice Street Farnham (4 Replies)
Discussion started by: freddie50
4 Replies

4. Shell Programming and Scripting

Parsing HTML, get text between 2 HTML tags

Hi there, I'm quite new to the forum and shell scripting. I want to filter out the "166.0 points". The results, that i found in google / the forum search didn't helped me :( <a href="/user/test" class="headitem menu" style="color:rgb(83,186,224);">test</a><a href="/points" class="headitem... (1 Reply)
Discussion started by: Mysthik
1 Replies

5. Shell Programming and Scripting

Script to create a text file whose content is the text of another files

Hello everyone, I work under Ubuntu 11.10 (c-shell) I need a script to create a new text file whose content is the text of another text files that are in the directory $DIRMAIL at this moment. I will show you an example: - On the one hand, there is a directory $DIRMAIL where there are... (1 Reply)
Discussion started by: tenteyu
1 Replies

6. Programming

Parsing a Text file using C++

I was trying to parse the text file, which will looks like this ###XYZABC#### ############ int = 4 char = 1 float = 1 . . ############ like this my text file will contains lots of entries and I need to store these entries in the map eg. map.first = int and map.second = 4 same way I... (5 Replies)
Discussion started by: agupta2
5 Replies

7. Shell Programming and Scripting

Linux Script create index.html file

I need a script that can do this: A script that searches all directories and subdirectories for .html files When a .html file is found it creates a index.html file in that folder. It then edits the index.html file and inserts links to all of the .html files that are in that folder into the... (5 Replies)
Discussion started by: seashell11
5 Replies

8. Shell Programming and Scripting

Create multiple text file from a single text file on AIX

Hi I need to create multiple text files from onc text file on AIX. The data of text files is as below: ********************************************** ********************************************** DBVERIFY: Release 10.2.0.4.0 - Production on Tue Nov 10 13:45:42 2009 Copyright (c) 1982,... (11 Replies)
Discussion started by: lodhi1978
11 Replies

9. Shell Programming and Scripting

Create a html file if a process is running??

Hi All, I need to check for a process, if the process is running then I have to create an HTML file, say A.HTML. If the process is not running then I have to rename the existing html, say A.HTML to B.HTML so that the process which looks for the file A.HTML does not find it? How do I do... (1 Reply)
Discussion started by: Hangman2
1 Replies

10. UNIX for Dummies Questions & Answers

How do I extract text only from html file without HTML tag

I have a html file called myfile. If I simply put "cat myfile.html" in UNIX, it shows all the html tags like <a href=r/26><img src="http://www>. But I want to extract only text part. Same problem happens in "type" command in MS-DOS. I know you can do it by opening it in Internet Explorer,... (4 Replies)
Discussion started by: los111
4 Replies
Login or Register to Ask a Question