From CSV (Double quote enclosed) file how to remove data double quotes with unix - csv

From CSV (Double quote enclosed) file how to REPLACE data double quotes (means double quote inside data) from 3rd html string field (it has data commas also i.e commas inside data) with ~ symbol with unix.
We should not remove any other double quotes.
Input File:
F1,F2,F3
"11111","ABABDBDA","<div style="text-aaa: justify;"> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli organi sss, alaaaala "
"22222","PPPPPPPP","<p style="text-align: justify;"> <span style="color:#ff0000;"><strong>Disponibile dal 25/03</strong></span></p> <div style="text-align: justify;"> Il manuale delinea l’evoluzione dei , ;"> </div>"
"333333","QQQQQQQ","<p style="text-align: justify;"> Il libro analizza i singoli cicli gestionali, partendo dalle rilevazioni, contabili per giungere poi alla destinazione di "
Expected output file:
F1,F2,F3
"11111","ABABDBDA","<div style=~text-aaa: justify;> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli organi sss, alaaaala"
"22222","PPPPPPPP","<p style=~text-align: justify;~> <span style=~color:#ff0000;~><strong>Disponibile dal 25/03</strong></span></p> <div style=~text-align: justify;~> Il manual"
"333333","QQQQQQQ","<p style=~text-align: justify;~> Il libro analizza i singoli cicli gestionali, partendo dalle rilevazioni, contabili per giungere poi alla destinazione"
I tried with awk command but its not giving expected output

Using Miller 6, and running
mlr --csv --lazy-quotes put '$F3=gsub($F3,"\"","~")' input.csv >output.csv
you get
F1,F2,F3
11111,ABABDBDA,"<div style=~text-aaa: justify;~> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli organi sss, alaaaala "
22222,PPPPPPPP,"<p style=~text-align: justify;~> <span style=~color:#ff0000;~><strong>Disponibile dal 25/03</strong></span></p> <div style=~text-align: justify;~> Il manuale delinea l’evoluzione dei , ;~> </div>"
333333,QQQQQQQ,"<p style=~text-align: justify;~> Il libro analizza i singoli cicli gestionali, partendo dalle rilevazioni, contabili per giungere poi alla destinazione di "
Some notes:
--lazy-quotes, accepts quotes appearing in unquoted fields, and non-doubled quotes appearing in quoted fields
put '$F3=gsub($F3,"\"","~")' to search " and replace it with ~.

If you don't find a solution with awk, here is a very simple Go program that uses the standard library's CSV parser, and its LazyQuotes option (emphasis added for your case):
If LazyQuotes is true, a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field.
From your original statement and the sample input, it looks to me like the only issue is that quotes for the HTML attributes were not properly escaped when the CSV was created. I think the LazyQuotes option can handle this correctly, and this seems to me like it would be more desireable than changing the HTML:
F1,F2,F3
11111,ABABDBDA,"<div style=""text-aaa: justify;""> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli organi sss, alaaaala "
22222,PPPPPPPP,"<p style=""text-align: justify;""> <span style=""color:#ff0000;""><strong>Disponibile dal 25/03</strong></span></p> <div style=""text-align: justify;""> Il manuale delinea l’evoluzione dei , ;""> </div>"
333333,QQQQQQQ,"<p style=""text-align: justify;""> Il libro analizza i singoli cicli gestionali, partendo dalle rilevazioni, contabili per giungere poi alla destinazione di "
and in table-view:
F1
F2
F3
11111
ABABDBDA
<div style="text-aaa: justify;"> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli org...
22222
PPPPPPPP
<p style="text-align: justify;"> <span style="color:#ff0000;"><strong>Disponibile dal 25/03</stro...
333333
QQQQQQQ
<p style="text-align: justify;"> Il libro analizza i singoli cicli gestionali, partendo dalle ril...
Here's a smaller sample to try and highlight:
creating the CSV reader
setting the LazyQuotes option
reading all records
creating the CSV writer
writing all records
No special processing is needed, the CSV parser just does the right thing for you:
csvBlob := `F1,F2,F3
"11111","ABABDBDA","<div style="text-aaa: justify;"> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli organi sss, alaaaala "
"22222","PPPPPPPP","<p style="text-align: justify;"> <span style="color:#ff0000;"><strong>Disponibile dal 25/03</strong></span></p> <div style="text-align: justify;"> Il manuale delinea l’evoluzione dei , ;"> </div>"
"333333","QQQQQQQ","<p style="text-align: justify;"> Il libro analizza i singoli cicli gestionali, partendo dalle rilevazioni, contabili per giungere poi alla destinazione di "
`
fIn := strings.NewReader(csvBlob)
r := csv.NewReader(fIn)
r.LazyQuotes = true
records, _ := r.ReadAll()
w := csv.NewWriter(os.Stdout)
w.WriteAll(records)
w.Flush()
You can view that in the Go Playground and run it.
Here's a more complete example to read from a file and write to a new file, with error checking:
fIn, err := os.Open("input.csv")
defer fIn.Close()
if err != nil {
log.Fatal("could not open input.csv:", err)
}
r := csv.NewReader(fIn)
r.LazyQuotes = true
records, err := r.ReadAll()
if err != nil {
log.Fatal("could not read CSV:", err)
}
fOut, err := os.Create("output.csv")
defer fOut.Close()
if err != nil {
log.Fatal("could not create output.csv:", err)
}
w := csv.NewWriter(fOut)
w.WriteAll(records)

You can use this ruby:
ruby -r csv -e '
puts CSV.parse($<.read, **{:headers=>false, :liberal_parsing=>true}).
map{|row| row[0..1]+[row[2..].join(",").gsub(/^"|"$/,"").gsub(/"/,"~")]}.
map{|a| a.to_csv(**{:force_quotes=>true})}.join
' file
Prints:
"F1","F2","F3"
"11111","ABABDBDA","<div style=~text-aaa: justify;~> Il MMM delinea l’evvv dei ccccc e dei ruorrrrli, degli organi sss, alaaaala "
"22222","PPPPPPPP","<p style=~text-align: justify;~> <span style=~color:#ff0000;~><strong>Disponibile dal 25/03</strong></span></p> <div style=~text-align: justify;~> Il manuale delinea l’evoluzione dei , ;~> </div>"
"333333","QQQQQQQ","<p style=~text-align: justify;~> Il libro analizza i singoli cicli gestionali, partendo dalle rilevazioni, contabili per giungere poi alla destinazione di "

Related

I have a text with html and css and need formatted text

I am re-making a website that takes tests. It was on PHP and now we are taking it to TypeScript.
I am using React and Material UI to display the feedback for the correct answer and explanation when the user sends their answer.
I get the feedback from an old database they were using (and that we will still use), and what they used to do was create a variable called html (string), and then concatenate each part of the html code raw.
Something like this: (in PHP .= and . is what you use to concatenate)
$html = '';
$html = '<div>';
$html .= '<p class="maintext"><span>' . $some_variable_they_want_in_span . '</span>';
$html .= $some_other_variable_that_is_empty_or_not_depending_on_if_clause . '</p>';
$html .= '</div>';
it is a pain... but the thing is. Now that I am showing the feedback, it comes in a terrible format that I can't simply show in a Typography element (Material UI, but I couldn't in a -p- tag either).
The text is, for example, this one:
" <p>Artículo séptimo.\n</p><p>1. En el ejercicio de sus funciones, los miembros de las Fuerzas y Cuerpos de Seguridad tendrán a todos los efectos legales el carácter de AGENTES DE LA AUTORIDAD.\n</p><p>2. Cuando se cometa delito de atentado, empleando en su ejecución armas de fuego, explosivos u otros medios de agresión de análoga peligrosidad, que puedan poner en peligro grave la integridad física de los miembros de las Fuerzas y Cuerpos de Seguridad, tendrán al efecto de su protección penal LA CONSIDERACIÓN DE AUTORIDAD.\n</p><p>3. La Guardia Civil sólo tendrá consideración de fuerza armada en el cumplimiento de las misiones de carácter militar que se le encomienden, de acuerdo CON EL ORDENAMIENTO JURÍDICO.\n</p><p>\n</p> "
How can I show this in a readable and nice text? I tried some npm packages and passing it through decodeURI but no change. Any ideas? Some text will even come with something like
"Artículo 2. Secretaría de Estado de Seguridad.<div>Corresponde a la persona titular de la Secretaría de Estado de Seguridad el ejercicio de las funciones a las que se refiere el artículo 62 de la Ley 40/2015, de 1 de octubre, y en particular, la dirección, coordinación y supervisión de los órganos directivos dependientes de la Secretaría de Estado, bajo la inmediata autoridad de la persona titular del Ministerio, para el ejercicio de las siguientes funciones:&nbsp;</div><ul><li><span style=\"letter-spacing: -0.015rem;\">El ejercicio del mando de las Fuerzas y Cuerpos de Seguridad DEL ESTADO, y la COORDINACIÓN Y SUPERVISIÓN DE LOS SERVICIOS Y MISIONES QUE LES CORRESPONDEN.</span></li></ul>"
Ok! So one of my coworkers found this solution:
import textParserTest from "~/utils/textparser"; // (which uses in its code the following: import parse from "html-react-parser";)
...
<div
contentEditable="true"
dangerouslySetInnerHTML={{
__html: textParserTest(props.question.answer, 0)
.toString()
.replaceAll("\\n", ""),
}}
></div>
So basically. html-react-parser package did the trick

anchor links doesen't link to url

can anyone help me figure out what's wrong with the code? links not working, if you click on it nothing happens. I thought I left some tags open but I checked with https://validator.w3.org and there are no such errors! What could be the problem?
I have seen the other questions and answers related to this topic but they did not help me.
note: navigate to "i miei lavori" page or "my work" page
link:
minimal reproducible example
html
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<meta name="viewport" content="width=device-width">
<title>i miei lavori - Andrea</title>
</head>
<body>
<div class="specchietto-menu">
<button class="pulsanti-menu" name="btnchisono" onclick="chisonoPage()">chi sono</button>
<button class="pulsanti-menu" style="color:blue;" name="btnlavori" onclick="lavoriPage()">i miei lavori</button>
<button class="pulsanti-menu" name="btncuriosita" onclick="curiositaPage()">curiosità</button>
</div>
<div class="choose-language">
<button class="btn-language" onclick="changeLanguage()"><img src="images/english-language.jpg" alt=""></button>
</div>
<br>
<div class="scrollTop"><i class="fa fa-angle-double-up" style="font-size:36px"></i></div>
<div class="contenitore">
<p class="presentazione-lavori">Lavori svolti per svago anni fà</p>
<br>
<div class="specchietto-articolo">
<!-- Firewall", un trojan per mIRC -->
<p class="titolo-articolo">"Firewall", un trojan per mIRC</p>
<p class="articolo"><img src="images/mirc-logo-mini.jpg" style="float:left;">Correva l'anno 2000, avevo da poco avuto accesso a internet, avevo una connessione 56k flat 12/24 con Libero#Sogno, ero affascinato da alcuni degli script di mIRC, il celebre programma di chat, molto gettonato in rete in quegli anni e ne provai alcuni, così per curiosità mi misi a leggere il codice sorgente degli script ".ini", fu così che iniziò il mio viaggio nel mondo della programmazione.
</p>
<p class="articolo">La mia prima creazione fù un trojan che chiamai "firewall", per ovvie ragioni di ingegneria sociale di cui parlerò più avanti. Il Trojan era composto da uno script che era caricato nel mio client, che inviava i comandi da eseguire sul client della vittima che avrebbe dovuto caricare lo script malevolo sul proprio mIRC ma le fondamenta del trojan era la direttiva "onNotice", un evento che veniva generato quando si riceveva un messaggio particolare, il notice appunto. Di default questi messaggi erano nascosti, il client li riceveva, li elaborava ma l'utente era ignaro di averlo ricevuto, per questo motivo lo scelsi. Lo script che era caricato nel mio client mIRC non faceva altro che inviare un "notice" criptato alla vittima, bastava aprire un canale privato con l'utente target per avere accesso alle funzioni.
</p>
<p class="articolo">C'erano funzioni standard per cambiare nick alla vittima, scrivere messaggi al suo posto e disconnetterla dal server con messaggi particolari, di solito quando c'era una disconnessione del client appariva un messaggio di questo genere "connection reset by peer", al posto di "peer" erano disponibili vari nomi tra cui Babbo Natale(connection reset by Babbo Natale), divertente!. Potevo scrivere messaggi su canali e chat private al posto del malcapitato e potevo cambiarli nick ma la feature più potente era poter eseguire qualsiasi direttiva sulla macchina vittima. La cosa più difficile di questo sistema era convincere la vittima a caricare lo script sul proprio client, da qui il nome che ho scelto per il trojan, "Firewall", c'era molta ignoranza informatica in quegli anni ma molti degli internauti sapeva cosa era un firewall e lo avrebbe caricato più facilmente.
</p>
<p class="articolo">Detto questo ci fù solo una vittima di questo trojan, un mio amico di chat che si fidò ciecamente di me e lo convissi molto facilmente a installare "Firewall". Tuttavia il divertimento durò poco, li cambiai nick un paio di volte, scrissi qualche parolaccia, feci coming-out al posto suo su dei canali pubblici e lo disconnettei diverse volte ma ero così orgoglioso del mio lavoro che per vantarmi li dissi tutto e subito e così dandomi della merda disinstallò lo scrip. Rimane ad oggi l'unica vittima di Firewall. Condividerei il codice sorgente ma è andato perduto negli anni.
</p>
<p style="font-size:80%;">Windows 98, mIRC scripting</p>
<!-- Convertitore da .wav a .mp3 -->
<br>
<p class="titolo-articolo">Convertitore da .wav a .mp3</p>
<p class="articolo"><img src="images/mp3-mini.jpg" style="float:left">Erano i primi anni 2000, avevo circa 16/17 anni ed era consuetudine rivoltare i CD musicali nel computer per poter creare le proprie playlist. Windows Media Player in quegli anni creava file wav quando si eseguivano queste operazioni e si sa che il formato wav è molto pesante rispetto agli mp3 e gli HD non erano molto capienti. Così sentii la necessità di un convertitore, cercai in internet e trovai una libreria per convertire, aprii il mio VB6 con cui smanettavo da poco tempo e scrissi qualche linea di codice. Il programma prevedeva una navigazione nelle cartelle di sistema per scegliere quali file convertire, una volta selezionati si avviava la conversione e venivano creati i files mp3 con gli stessi nomi degli originali. È stato veramente semplice utilizzare la libreria, bastava impostare alcune configurazioni e richiamare la funzione di conversione con i dovuti parametri.
</p>
<p style="font-size:80%;">Windows ME, Visual Basic 6</p>
<!-- Sondaggio scolastico -->
<br>
<p class="titolo-articolo">Sondaggio scolastico</p>
<p class="articolo"><img src="images/sondaggio-mini.jpg" style="float:left">Frequentavo il II anno del Liceo Scientifico del mio paese, il Preside aveva fatto distribuire dei fogli che avrebbero costituito un sondaggio ma non ricordo i temi trattati. Era complicato analizzare i dati delle risposte di tutti gli alunni a mano così mi chiese se potevo scrivere un programma che raccogliesse i dati e li elaborasse.
</p>
<p class="articolo">Allora non ero a conoscenza dell'esistenza di SQL ne sapevo a cosa servisse Access di Microsoft così mi venne in mente di immagazzinare i dati nelle celle dei fogli Excel, usai le librerie di Visual Basic 6 per accedere ai fogli di calcolo, MSDN era la mia fonte principale di informazione per sviluppare.
</p>
<p class="articolo">Mi divertii molto a creare questa applicazione, credevo che avrei ricevuto dei compensi scolastici, crediti formativi o un'incremento dei voti in matematica(in cui andavo già bene) ma l'unica cosa che ricevetti è stato l'incremento della mia esperienza(ben venga sempre) e un grazie dal Preside.
</p>
<p style="font-size:80%;">Windows XP, Visual Basic 6, Excel</p>
<!-- Formattatore files .csv -->
<br>
<p class="titolo-articolo">Formattatore files .csv</p>
<p class="articolo"><img src="images/csvicon-mini.jpg" style="float:left">È stato molto semplice sviluppare questa applicazione. Avevo bisogno di formattare dei files csv composti da tantissime righe, era impossibile farlo a mano così lessi qualche tutorial del C++ e da lì a poco mi misi a scrivere righe di codice. Leggendo i tutorial riuscii a capire anche i puntatori e feci qualche applicazione che li utilizzava ma era per solo scopo didattico. Ora per essere sincero non ricordo quasi nulla di questo fantastico linguaggio dal momento che è stata la prima e l'ultima volta che lo utilizzai.
</p>
<p style="font-size:80%;">GNU Linux Debian, C++</p>
<!-- Indicatori su piattaforma di trading -->
<br>
<p class="titolo-articolo">Indicatori su piattaforma di trading</p>
<p class="articolo"><img src="images/metatrader4icon-small.jpg" style="float:left">Negli anni 2012/2013 circa mi accanii nel trading online e utilizzavo la piattaforma Metatrader4, ore e ore di studio di molta analisi tecnica. Una volta acquisite le conoscenze cercai di supplire alla mancanza di indicatori per il volume di scambi nel forex e non solo. Di indicatori ed oscillatori ce ne erano molti ma mi accorsi che mancava qualcosa e mi misi a lavoro. Sinceramente ora non ricordo bene cosa facessero questi indicatori, nel codice sorgente di alcuni di essi c'è una valore Delta che non ricordo proprio cosa sia. Comunque questi indicatori come già detto misuravano il volume di scambi e quindi un bilanciamento tra domanda e offerta e ce ne sono alcuni che mi servivano per gestire il money management. Di questi ho il codice sorgente, perdonatemi se qualche file risulta poco leggibile ma quando l'ho scritto dovevo programmare da un decennio circa.</p>
<br>VSA CumulativeDelta 0.1.mq4
<br>VSA PriceDelta Correlation v.0.1.mq4
<br>VSA PriceVolume Correlation v.0.4.mq4
<br>VSA Volume Percentage v.1.5.mq4
<br> MM RiskControl v2.1.mq4
<p style="font-size:80%;">Windows XP, MetaTrader4 Language</p>
<!-- Alla ricerca dell'olio essenziale -->
<br>
<p class="titolo-articolo">Alla ricerca dell'olio essenziale</p>
<p class="articolo"><img src="images/olioessenziale-mini.jpg" style="float:left">Avevo acquistato da poco una enciclopedia degli olii essenziali, ancora la possiedo, è ben fatta, ci sono descrizioni dettagliate di molti olii, nelle descrizioni ci sono le proprietà e gli antichi usi nella erboristeria popolare e molte altre informazioni, inoltre ci sono delle sezioni in cui puoi ricercare l'olio essenziale per proprietà, ad esempio se cerchi la voce antinfiammatorio puoi trovare nell'elenco l'olio di eucalipto. Perchè non portare in digitale questo sistema e magari migliorarlo anche?
</p>
<p class="articolo">Così mi misi a lavoro, scelsi Gambas per sviluppare l'applicazione, aveva tutte le caratteristiche di cui avevo bisogno, e come database mi sono appoggiato a mySQL. Oltre che un'interfaccia per inserire gli olii e le loro proprietà c'era la parte più importante dell applicazione che consisteva nell'inserire una o più proprietà nella barra di ricerca. Così venivano fuori per primi gli olii che possedevano tutte quelle proprietà, mentre secondariamente erano elencati gli olii che possedevano solo alcune delle proprietà cercate.
</p>
<p class="articolo">Tra le svariate reinstallazioni, backup incompleti e pc bruciati l'applicazione è andata perduta, mi sarebbe piaciuto poterla condividere in rete.
</p>
<p style="font-size:80%;">GNU Linux Debian, Gambas</p>
<br>
<p class="presentazione-lavori">Lavori svolti recentemente con Angular</p>
<!-- NGRX Store Demo -->
<br>
<p class="titolo-articolo">NGRX Store Demo</p>
<p class="articolo"><img src="images/logo-ngrx.jpg" style="float:left;">Questa demo mostra il funzionamento basilare di ngrx, cioè mostra l’uso di actions, reducers e selector. Inserendo i dati nel form viene aggiornato l’utente nello store.</p>
github
stackblitz
<br><br><p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular, NGRX</p>
<!-- NGRX Entity Demo -->
<br>
<p class="titolo-articolo">NGRX Entity Demo</p>
<p class="articolo"><img src="images/logo-ngrx.jpg" style="float:left;">Questa demo è stata sviluppata per mostrare il funzionamento delle entity in ngrx, ovviamente usa anche actions, reducers e selectors. È possibile aggiungere gli utenti tramite il form che verranno presentati e ordinati secondo l’età.</p>
github
stackblitz
<p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular, NGRX</p>
<!-- NGRX Effects and Entity Demo -->
<br>
<p class="titolo-articolo">NGRX Effects and Entity Demo</p>
<p class="articolo"><img src="images/logo-ngrx.jpg" style="float:left;">In questa demo utilizzo per la prima volta gli Effects che vanno prima a modificare i dati mock per simulare un cambiamento nel database, se l’ aggiornamento dei dati mock ha successo si andranno a modificare anche i dati nello store, in caso contrario viene lanciata l’action di errore di inserimento. Dall’ interfaccia ui è possibile aggiungere gli utenti che saranno listati in ordine di età.</p>
github
stackblitz
<p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular, NGRX</p>
<!-- NGRX Chain of Responsibility Demo -->
<br>
<p class="titolo-articolo">NGRX Chain of Responsibility Demo</p>
<p class="articolo"><img src="images/logo-ngrx.jpg" style="float:left;">In questa demo viene affrontato il discorso del pattern della delegazione di responsabilità.Sostanzialmente il componente conteiner si occupa di quasi tutta la logica e il resto dei componenti sono solo di presentazione, ad eccezione del componente per dare il rating nel quale c’è una funzione per la visualizzazione delle stelle di rating e per l’emissione del nuovo rating che scalando la gerarchia dei componenti arriverà fino al componente conteiner che farà il dispatch dell’ azione di inserimento rating. I dati da osservare hanno lo stesso funzionamento, al cambiare dei dati nello store, essi vengono passati tramite le proprietà di input ai componenti figli.</p>
github
stackblitz
<p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular, NGRX</p>
<!-- rxjs combineLatest Demo -->
<br>
<p class="titolo-articolo">rxjs combineLatest Demo</p>
<p class="articolo"><img src="images/logo-RxJS.jpg" style="float:left;">Non c’ è molto da dire su questa demo, mostra l’uso dell’ operatore rxjs combineLatest, combina due observable e restituisce un observable di array di oggetti.</p>
github
stackblitz
<br><br><p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular</p>
<!-- Change Detection Strategy Default Demo -->
<br>
<p class="titolo-articolo">Change Detection Strategy Default Demo</p>
<p class="articolo"><img src="images/Logo-Angular.jpg" style="float:left;">La CD di default praticamente viene sempre eseguita, qualsiasi pulsante viene cliccato, quindi si renderizzano i componenti ma individua i cambiamenti dell’ oggetto solo nel caso si clicchi “Change Object Reference”.</p>
github
stackblitz
<br><p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular</p>
<!-- Change Detection Strategy OnPush Demo -->
<br>
<p class="titolo-articolo">Change Detection Strategy OnPush Demo</p>
<p class="articolo"><img src="images/Logo-Angular.jpg" style="float:left;">Nel caso della CD OnPush, che si usa solo per i componenti children, le proprietà di #Input vengono renderizzate solo nel caso in cui l’oggetto cambi referenza, nel caso in cui viene modificata solo la proprietà dell’ oggetto il dato non viene renderizzato perché la CD non individua cambiamenti.</p>
github
stackblitz
<p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular</p>
<!-- Angular Security Sanitization Demo -->
<br>
<p class="titolo-articolo">Angular Security Sanitization Demo</p>
<p class="articolo"><img src="images/Logo-Angular.jpg" style="float:left;">Questa è una demo per provare una feature di sicurezza in Angular, il contenuto interpolato non è interpretato e viene renderizzato completamente mentre usando innerHTML il contenuto viene interpretato e sanificato.</p>
github
stackblitz
<br><p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular</p>
<!-- Angular Animations Owl Carousel Demo -->
<br>
<p class="titolo-articolo">Angular Animations Owl Carousel Demo</p>
<p class="articolo"><img src="images/Logo-Angular.jpg" style="float:left;">Questa è una demo di un owl carousel, tipo quelle che si vedono su ebay o amazon, per gli oggetti visti di recente oppure per gli oggetti correlati.</p>
github
stackblitz
<br><br><br><p style="font-size:80%;">GNU Linux Debian 10, TypeScript, Angular</p>
<!-- CarsMarketPlace -->
<br>
<p class="titolo-articolo">Cars Market Place</p>
<p class="articolo"><img src="images/maserati_mc20_img1.jpg" style="float:left;">Questo è il primo progetto che ho realizzato con Angular, senza contare "helloworld" e altre ormai insignificanti demo. Non avrei voluto pubblicarlo su github perchè essendo la prima esperienza con Angular il codice non è il massimo, le best pratice non sono tutte rispettate e ci sono altre questioni, un refactor non è pensabile, insomma come prima esperienza va piu che bene ma non bisogna fare molto caso alla forma, non è neanche completato del tutto, inoltre voglio ribadire che non sono un designer quindi il design non è apprezzabile.</p>
<p class="articolo">Con firefox sul mio pc il design è corretto ma con stackblitz su firefox è sballato, problema di stackblitz, usa Chrome per visualizzare la demo in stackblitz. Loggati con user e password "StanfRei"</p>
<p class="articolo">È un e-commerce in "stile e-bay" l'utente può comprare e vendere auto ma la funzione di vendita è stata disattivata in questa demo. La gallery presenta le auto in vendita da vari utenti, con il prezzo pieno e scontato e il rating di altri compratori, c'è il pulsante per osservare l'auto o rimuovere l'interesse. Sul lato sinistro ci sono le auto viste di recente, solo in caso di login effettuato. Le altre sezioni disponibili sul menu, se effettuato l'accesso, sono 'Observed Cars' e 'UserProfile', in quest' ultima è possibile inserire lo sconto per le auto messe in vendita dall' utente loggato. Tramite le card delle auto nella Gallery è possibile raggiungere sezioni dove è possibile comprare l' auto e dare un rating, oppure vedere le auto simili a quella selezionata. Come puoi aver capito ci sono delle guardie che limitano gli accessi a delle sezioni dell' app. Usa i dati mock, se si usasse un backend reale e ci fossero degli errori, sarebbero visualizzati a schermo, vengono intercettati dall' error interceptor e passati a un servizio, iniettato e gestito dal componente navbar.</p>
github
stackblitz
<br><p style="font-size:80%;">GNU Linux Debian 10, (NodeJS), TypeScript, Angular</p>
</div>
</div>
<div class="contenitore-email">
<p style="text-align:right">andreadicioccio1983#gmail.com</p>
</div>
<script>
function chisonoPage(){ window.open('chisono.html', '_self'); }
function lavoriPage(){ window.open('lavori.html', '_self'); }
function curiositaPage(){ window.open('curiosita.html', '_self'); }
let scrollTopBtn = document.querySelector('div.scrollTop')
scrollTopBtn.addEventListener('click', () => {
window.scrollTo({top:0, behavior: 'smooth'})
})
checkLanguage()
function checkLanguage(){
language = getLanguage()
if(language == "italian"){
}else if(language == "english"){
window.location = "lavori-en.html"
}else{
window.location = 'home.html'
}
}
function changeLanguage(){
setLanguage("english")
window.location = "lavori-en.html"
}
function getLanguage(){
storage = window.localStorage
language = storage.getItem("language")
console.log(language)
return language
}
function setLanguage(language){
storage = window.localStorage
storage.setItem("language", language)
}
</script>
</body>
css
*{
font-family: 'Poppins';
z-index: -1;
}
body{
background-color:white;
text-align:center;
margin: 0;
}
p {
font-size:1em;
text-align:justify;
}
.scrollTop{
position: fixed;
right: 50px;
bottom: 50px;
z-index: 0;
}
.scrollTop:hover{
cursor: pointer;
}
.specchietto-menu{
text-align:center;
}
.pulsanti-menu{
background-color:white;
border:solid 1px lightgrey;
font-size:1em;
height:2em;
width:7em;
margin-top: 10px;
}
.pulsanti-menu:hover{
cursor: pointer;
}
div.contenitore{
text-align:center;
}
.choose-language{
position: absolute;
right: 5px;
top: 10px;
z-index: 0;
}
.btn-language{
background-color: white;
border: 0;
}
.presentazione-lavori{
font-size: 26px;
text-align:center;
}
div.specchietto-articolo{
text-align:left;
width:465px;
position: relative;
display: inline-block;
}
p.titolo-articolo {
font-size:24px;
text-align:center;
}
p.articolo{
padding: 5px;
}
.contenitore-email{
text-align:right;
background-color:white;
width: 100%;
/*position: static;*/
/*right: 0px;
left: 0px;*/
}
#media screen and (max-width: 450px) {
.pulsanti-menu{
font-size: small;
width: 100px;
}
.choose-language{
position: absolute;
right: 5px;
top: 50px;
}
.presentazione-lavori{
font-size: 20px;
}
p.titolo-articolo{
font-size: 18px;
}
.specchietto-articolo{
width:100% !important;
}
p.articolo{
font-size: small;
}
}
It's because of the z-index in your css. Links with negative z-index are unclickable, its better to remove the z-index: -1 from your *-selector.
Or you can add an additional selector for the <a>-Tags to your style:
a {
z-index: 1;
}

Delete spaces around specific tags in an html file in shell

I'm looking to write a shell script that minify less html files, but I'm having a problem.
I would like to delete the space on each side of a specific html tag, these tags being read from a file. With "perl", I can't do it, nothing happens, with sed in 2 commands I almost get what I want. In the example below, the space between some tags is removed, but not all, at the level of the "section" tags there is a problem, "h2" too, however the pattern matches ...
for tag in $tag_file ; do
# perl -e '$comHtml=<>; $comHtml=~s/ *(<${tag} *.* *>) */\1/g; print $comHtml' < tmp_html
sed -i -r -e "s: *(<${tag} *.* *>) *:\1:gI" ./tmp_html
sed -i -r -e "s: *(</${tag} *.* *>) *:\1:gI" ./tmp_html
done
here, $tag_file contains the specific tag got from a file, for example $tag_file = html \n head \n section \n ...
Entry html :
<!doctype html> <html lang="fr"> <head> <meta charset="UTF-8"> <title>La gazette de L-INFO</title> <link rel="stylesheet" type="text/css" href="./styles/gazette.css"> </head> <body> <nav> <ul> <li>Accueil</li> <li>Toute l'actu</li> <li>Recherche</li> <li>La rédac'</li> <li>jbigoude <ul> <li>Mon profil</li> <li>Nouvel article</li> <li>Se déconnecter</li> </ul> </li> </ul> </nav> <header> <img src="./images/titre.png" alt="La gazette de L-INFO" width="780" height="83"> <h1>Le site de désinformation n°1 des étudiants en Licence Info</h1> </header> <main> <section class="centre"> <h2>À la Une</h2> <img src="images/hacker.jpg" alt="Un mouchard dans un corrigé de Langages du Web"><br> Un mouchard dans un corrigé de Langages du Web <img src="images/hymne.jpg" alt="Votez pour l'hymne de la Licence"><br> Votez pour l'hymne de la Licence <img src="images/melenchon.jpg" alt="L'amphi Sciences Naturelles bientôt renommé amphi Mélenchon"><br> L'amphi Sciences Naturelles bientôt renommé amphi Mélenchon </section> <section class="centre"> <h2>L'info brûlante</h2> <img src="images/walkingdead.jpg" alt="Il avait annoncé 'Je vais vous défoncer' l'enseignant relaxé"><br> Il leur avait annoncé "Je vais vous défoncer" l'enseignant relaxé <img src="images/pingouins.jpg" alt="Des pinguoins dans l'amphi B"><br> Toute une famille de pingouins découverte dans l'amphi B <img src="images/macron.jpg" alt="Emmanuel Macron obtient sa Licence d'Info en EAD"><br> Emmanuel Macron obtient sa Licence Info en EAD </section> <section class="centre"> <h2>Les incontournables</h2> <img src="images/arnaque.jpg" alt="Arnaque au devoir corrigé de TLSP"><br> Une arnarque au corrigé de TL mise à jour <img src="images/calendrier.jpg" alt="Le calendier des Dieux de la Licence bientôt disponible"><br> Le calendier des Dieux de la Licence bientôt disponible <img src="images/sondage.jpg" alt="Allez-vous réussir votre année ?"><br> Résultat de notre sondage : allez-vous réussir votre année ? </section> <section> <h2>Horoscope de la semaine</h2> <p>Vous l'attendiez tous, voici l'horoscope du semestre pair de l'année 2019-2020. Sans surprise, il n'est pas terrible...</p> <table id="horoscope"> <tr> <td>Signe</td> <td>Date</td> <td>Votre horoscope</td> </tr> <tr> <td>♈ Bélier</td> <td>du 21 mars<br>au 19 avril</td> <td rowspan="4"> <p>Après des vacances bien méritées, l'année reprend sur les chapeaux de roues. Tous les signes sont concernés. </p> <p>Jupiter s'aligne avec Saturne, péremptoirement à Venus, et nous promet un semestre qui ne sera pas de tout repos. Février sera le mois le plus tranquille puisqu'il ne comporte que 29 jours.</p> <p>Les fins de mois seront douloureuses pour les natifs du 2e décan au moment où tomberont les tant-attendus résultats du module d'<em>Algorithmique et Structures de Données</em> du semestre 3.</p> </td> </tr> <tr> <td>♉ Taureau</td> <td>du 20 avril<br>au 20 mai</td> </tr> <tr> <td>...</td> <td>...</td> </tr> <tr> <td>♓ Poisson</td> <td>du 20 février<br>au 20 mars</td> </tr> </table> <p>Malgré cela, notre équipe d'astrologues de choc vous souhaite à tous un bon semestre, et bon courage pour le module de <em>Système et Programmation Système</em>.</p> </section> </main> <footer>© Licence Informatique - Janvier 2020 - Tous droits réservés</footer> </body> </html>
output html :
<!doctype html><html lang="fr"><head><meta charset="UTF-8"><title>La gazette de L-INFO</title><link rel="stylesheet" type="text/css" href="./styles/gazette.css"></head><body><nav><ul> <li>Accueil</li> <li>Toute l'actu</li> <li>Recherche</li> <li>La rédac'</li> <li>jbigoude <ul> <li>Mon profil</li> <li>Nouvel article</li> <li>Se déconnecter</li></ul> </li> </ul></nav><header> <img src="./images/titre.png" alt="La gazette de L-INFO" width="780" height="83"><h1>Le site de désinformation n°1 des étudiants en Licence Info</h1></header><main><section class="centre"><h2>À la Une</h2> <img src="images/hacker.jpg" alt="Un mouchard dans un corrigé de Langages du Web"><br> Un mouchard dans un corrigé de Langages du Web <img src="images/hymne.jpg" alt="Votez pour l'hymne de la Licence"><br> Votez pour l'hymne de la Licence <img src="images/melenchon.jpg" alt="L'amphi Sciences Naturelles bientôt renommé amphi Mélenchon"><br> L'amphi Sciences Naturelles bientôt renommé amphi Mélenchon </section> <section class="centre"> <h2>L'info brûlante</h2> <img src="images/walkingdead.jpg" alt="Il avait annoncé 'Je vais vous défoncer' l'enseignant relaxé"><br> Il leur avait annoncé "Je vais vous défoncer" l'enseignant relaxé <img src="images/pingouins.jpg" alt="Des pinguoins dans l'amphi B"><br> Toute une famille de pingouins découverte dans l'amphi B <img src="images/macron.jpg" alt="Emmanuel Macron obtient sa Licence d'Info en EAD"><br> Emmanuel Macron obtient sa Licence Info en EAD </section> <section class="centre"> <h2>Les incontournables</h2> <img src="images/arnaque.jpg" alt="Arnaque au devoir corrigé de TLSP"><br> Une arnarque au corrigé de TL mise à jour <img src="images/calendrier.jpg" alt="Le calendier des Dieux de la Licence bientôt disponible"><br> Le calendier des Dieux de la Licence bientôt disponible <img src="images/sondage.jpg" alt="Allez-vous réussir votre année ?"><br> Résultat de notre sondage : allez-vous réussir votre année ? </section> <section> <h2>Horoscope de la semaine</h2><p>Vous l'attendiez tous, voici l'horoscope du semestre pair de l'année 2019-2020. Sans surprise, il n'est pas terrible...</p> <table id="horoscope"> <tr> <td>Signe</td> <td>Date</td> <td>Votre horoscope</td> </tr> <tr> <td>♈ Bélier</td> <td>du 21 mars<br>au 19 avril</td> <td rowspan="4"> <p>Après des vacances bien méritées, l'année reprend sur les chapeaux de roues. Tous les signes sont concernés. </p> <p>Jupiter s'aligne avec Saturne, péremptoirement à Venus, et nous promet un semestre qui ne sera pas de tout repos. Février sera le mois le plus tranquille puisqu'il ne comporte que 29 jours.</p> <p>Les fins de mois seront douloureuses pour les natifs du 2e décan au moment où tomberont les tant-attendus résultats du module d'<em>Algorithmique et Structures de Données</em> du semestre 3.</p> </td> </tr> <tr> <td>♉ Taureau</td> <td>du 20 avril<br>au 20 mai</td> </tr> <tr> <td>...</td> <td>...</td> </tr> <tr> <td>♓ Poisson</td> <td>du 20 février<br>au 20 mars</td> </tr> </table> <p>Malgré cela, notre équipe d'astrologues de choc vous souhaite à tous un bon semestre, et bon courage pour le module de <em>Système et Programmation Système</em>.</p> </section></main><footer>© Licence Informatique - Janvier 2020 - Tous droits réservés</footer></body></html>
The main issue with your perl line is your quoting; you used single quotes, which means you don't have to escape the Perl variables, but it also means the shell variable ${tag} will be interpreted by Perl (where it's empty) not the shell. You can access shell variables more easily from Perl by either passing them as arguments or environment variables. You also didn't use the -i switch for in-place editing, so you just printed the changes to STDOUT.
With ojo installed, you can do this with a proper HTML parser and thus not be susceptible to edge cases:
env tag=$tag perl -0777 -pi -CS -Mojo -e '$_ = x($_);
$_->find($ENV{tag})->each(sub {
$_->content($_->content =~ s/\A *//r =~ s/ *\z//r);
my ($p, $n) = ($_->previous_node, $_->next_node);
$p->content($p->content =~ s/ *\z//r) if defined $p and ($p->type eq "text" or $p->type eq "raw");
$n->content($n->content =~ s/\A *//r) if defined $n and ($n->type eq "text" or $n->type eq "raw");
})' tmp_html
The -0777 switch ensures the file will be operated on in one step rather than by line, -pi wraps the code in a loop which will assign the input to $_ and then update that file in-place with the resulting value of $_, and -CS ensures it will be decoded from UTF-8 to parse and encoded back after.
The x function from ojo creates a Mojo::DOM object, which can then find every instance of the requested tag and operate on it (which includes its contents and closing tag).
The substitution operations: s/\A *//r and s/ *\z//r remove all space characters from the beginning or end of the string respectively, and return the modified string (/r prevents it from operating in place, so you can use this with Mojo::DOM's content method). To instead remove any whitespace characters (including newlines), use s/\A\s*//r and s/\s*\z//r.
After some communication with OP I hope that I properly understood the problem.
HTML tags is stored in separate file one per line (tag_file.txt), in separate file we have HTML webpage code (file.html).
The code should strip spaces in HTML webpage code (file.html) around tags [opening,closing] specified in tag file (tag_file.txt).
NOTE: processing done with perl script without shell's assistance (shortens processing time)
use strict;
use warnings;
use feature 'say';
my $tag_file = 'tag_file.txt';
my $html_file = 'file.html';
open my $fh_tag, '<', $tag_file # open tag file
or die "Couldn't open $tag_file: $!";
my #tags = <$fh_tag>; # read tags into array
chomp #tags; # remove eol from tag lines
close $fh_tag; # close tag file
open my $fh_html, '<', $html_file # open html file
or die "Couldn't open $html_file: $!";
my $html = do { local $/; <$fh_html> }; # read whole file into variable
close $fh_html; # close html file
# now make substitution for each read tag
for my $tag (#tags) { $html =~ s!\s*(</?$tag\s*.*?>)\s*!$1!g; }
say $html;
Content of tag_file.txt
html
head
body
section

Error while parsing a JSON with angular 8

I have a problem when I try to parse a JSON using angular 8; this is my code:
getBandi(){
this.http.get("myURL").subscribe((res) => {
if (JSON.stringify(res)){
var arra = res as any[];
for(let i=0;i<arra.length;i++){
console.log(arra[i]["efa6f15d-0028-45e3-b4b4-e35bff160d47"]);
}
}
}, (error) =>{
alert("Error")
});
}
and this is the structure of my jSON (actually is an array of this type):
{
"efa6f15d-0028-45e3-b4b4-e35bff160d47":{ },
"30c83720-6c74-4373-929c-4c45102c49c5":{ },
"27598461-f4cb-4c80-bff9-23aa50f12c0f":{ },
"f03897c9-d636-4bcb-95bd-fe130f26d4f3":{ },
"8808f9b5-4460-4fcb-b623-83e0ba71f315":{ },
"a158776a-7134-49f4-be57-5388c8d8e5ae":{ },
"ce654fde-2155-4c1b-9609-973a14e212ee":{ },
"c8b2a21b-2b66-4af7-8289-a37db0fdc916":{ },
"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43":{ },
"d9221499-0b6f-4663-a122-1054038fc977":{ },
"5260368d-ed28-4227-a76d-773461ecce68":{ },
"a8d4dab3-94b7-49b9-9ef1-63193fe5b405":{ }
}
the problema is that when I try to log the value of this key "efa6f15d-0028-45e3-b4b4-e35bff160d47" I always get
undefined
this is the output of JSON.stringfy(res):
["{\n\t\"efa6f15d-0028-45e3-b4b4-e35bff160d47\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/in_primo_piano\\/Credito_Imposta_regioni_Mezzogiorno-min.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"link\": \"\",\n\t\t\t\"target\": \"0\",\n\t\t\t\"rel\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 758,\n\t\t\t\"height\": 428\n\t\t}\n\t},\n\t\"30c83720-6c74-4373-929c-4c45102c49c5\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/headers\\/bonus_investimenti_mezzogiorno-min.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 2500,\n\t\t\t\"height\": 300\n\t\t}\n\t},\n\t\"27598461-f4cb-4c80-bff9-23aa50f12c0f\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<strong>Contributo per l\\u2019acquisto di beni strumentali<\\/strong> <strong>nuovi<\\/strong> destinati a strutture produttive ubicate <strong>nelle regioni del Mezzogiorno.<\\/strong>\"\n\t\t}\n\t},\n\t\"f03897c9-d636-4bcb-95bd-fe130f26d4f3\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<div style=\\\"text-align: justify;\\\">Le imprese che intendono fruire del credito d\\u2019imposta devono presentare una Comunicazione all\\u2019Agenzia delle Entrate.<\\/div>\\r\\n<div style=\\\"text-align: justify;\\\">L'azienda beneficiaria pu\\u00f2 utilizzare il credito d\\u2019imposta maturato <strong>solo in compensazione<\\/strong> tramite modello F24.<\\/div>\"\n\t\t}\n\t},\n\t\"8808f9b5-4460-4fcb-b623-83e0ba71f315\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<strong>Credito d\\u2019imposta spettante (in % sull\\u2019investimento effettuato):<\\/strong><br \\/><br \\/><strong><span style=\\\"text-decoration: underline;\\\">REGIONI: Campania, Puglia, Basilicata, Calabria, Sicilia, Sardegna<\\/span><\\/strong><br \\/>\\r\\n<ul>\\r\\n<li>45% per le piccole imprese<\\/li>\\r\\n<li>35% per le medie imprese<\\/li>\\r\\n<li>25% per le grandi imprese<\\/li>\\r\\n<\\/ul>\\r\\n<span style=\\\"text-decoration: underline;\\\"><strong>REGIONI: Molise e Abruzzo<\\/strong><\\/span><br \\/>\\r\\n<ul>\\r\\n<li>30% per le piccole imprese<\\/li>\\r\\n<li>20% per le medie imprese<\\/li>\\r\\n<li>10% per le grandi imprese<\\/li>\\r\\n<\\/ul>\\r\\n<strong>L\\u2019agevolazione spetta per investimenti di importo massimo pari a:<\\/strong><br \\/>\\r\\n<ul>\\r\\n<li><strong>3 milioni<\\/strong> per le piccole imprese<\\/li>\\r\\n<li><strong>10 milioni<\\/strong> per le medie imprese<\\/li>\\r\\n<li><strong>15 milioni<\\/strong> per le grandi imprese<\\/li>\\r\\n<\\/ul>\\r\\n<p>Il Credito D'imposta per gli investimenti nelle Regioni del Mezzogiorno \\u00e8 cumulabile con altre misure quali:<\\/p>\\r\\n<ul>\\r\\n<li><strong>Super-ammortamento del 140%<\\/strong> delle quote di ammortamento e canoni di locazione di beni strumentali per le operazioni effettuate fino al 30\\/06\\/2018.<\\/li>\\r\\n<li><strong>Iper-ammortamento del 250%<\\/strong> sull\\u2019acquisto di beni strumentali nuovi ad alto contenuto tecnologico per l\\u2019anno 2017.<\\/li>\\r\\n<\\/ul>\\r\\n<p><strong>Definizioni:<\\/strong><\\/p>\\r\\n<p><span style=\\\"text-decoration: underline;\\\"><strong>Piccole imprese:<\\/strong><\\/span> occupano meno di 50 persone e realizzano un fatturato annuo o un totale di bilancio annuo non superiore a 10 milioni di \\u20ac.<br \\/><strong><span style=\\\"text-decoration: underline;\\\">Medie imprese<\\/span>: <\\/strong>occupano meno di 250 persone e realizzano un fatturato annuo che non supera i 50 milioni di \\u20ac oppure hanno totale di bilancio annuo non supera i 43 milioni di \\u20ac.<\\/p>\"\n\t\t}\n\t},\n\t\"a158776a-7134-49f4-be57-5388c8d8e5ae\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<div style=\\\"text-align: justify;\\\">Il credito d'imposta pu\\u00f2 essere concesso per investimenti in <strong>beni strumentali nuovi<\\/strong> <strong>effettuati dall'1\\u00b0 gennaio 2016 e fino al 31 dicembre 2019<\\/strong> per:<\\/div>\\r\\n<ul>\\r\\n<li style=\\\"text-align: justify;\\\">\\r\\n<div>la realizzazione di un nuovo stabilimento<\\/div>\\r\\n<\\/li>\\r\\n<li style=\\\"text-align: justify;\\\">\\r\\n<div>l\\u2019ampliamento di uno stabilimento esistente<\\/div>\\r\\n<\\/li>\\r\\n<li style=\\\"text-align: justify;\\\">\\r\\n<div>la diversificazione della produzione di uno stabilimento<\\/div>\\r\\n<\\/li>\\r\\n<li style=\\\"text-align: justify;\\\">\\r\\n<div>la trasformazione radicale del processo produttivo complessivo di uno stabilimento esistente<\\/div>\\r\\n<\\/li>\\r\\n<li>\\r\\n<div style=\\\"text-align: justify;\\\">la riattivazione di uno stabilimento chiuso o che sarebbe stato chiuso qualora non fosse stato acquisito<\\/div>\\r\\n<\\/li>\\r\\n<\\/ul>\"\n\t\t}\n\t},\n\t\"ce654fde-2155-4c1b-9609-973a14e212ee\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Possono beneficiare del contributo tutte le aziende con <strong>progetti di investimento localizzati nelle regioni del Mezzogiorno:<\\/strong><br \\/>\\r\\n<ul>\\r\\n<li>Campania<\\/li>\\r\\n<li>Puglia<\\/li>\\r\\n<li>Basilicata<\\/li>\\r\\n<li>Calabria<\\/li>\\r\\n<li>Sicilia<\\/li>\\r\\n<li>Sardegna<\\/li>\\r\\n<li>Molise<\\/li>\\r\\n<li>Abruzzo<\\/li>\\r\\n<\\/ul>\"\n\t\t}\n\t},\n\t\"c8b2a21b-2b66-4af7-8289-a37db0fdc916\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t},\n\t\"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Credito D'Imposta\"\n\t\t}\n\t},\n\t\"d9221499-0b6f-4663-a122-1054038fc977\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Campania, Puglia, Basilicata, Calabria, Sicilia, Sardegna, Molise, Abruzzo\"\n\t\t}\n\t},\n\t\"5260368d-ed28-4227-a76d-773461ecce68\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutti i Settori\"\n\t\t}\n\t},\n\t\"a8d4dab3-94b7-49b9-9ef1-63193fe5b405\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t}\n}","{\n\t\"efa6f15d-0028-45e3-b4b4-e35bff160d47\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/in_primo_piano\\/agevolazione-azienda-teaser.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"link\": \"\",\n\t\t\t\"target\": \"0\",\n\t\t\t\"rel\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 600,\n\t\t\t\"height\": 300\n\t\t}\n\t},\n\t\"30c83720-6c74-4373-929c-4c45102c49c5\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/in_primo_piano\\/agevolazione-aziende-full.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 2500,\n\t\t\t\"height\": 300\n\t\t}\n\t},\n\t\"27598461-f4cb-4c80-bff9-23aa50f12c0f\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<strong>CONTRIBUTO PER INNOVAZIONE TECNOLOGICA E SVILUPPO NUOVI PRODOTTI E SERVIZI,<span style=\\\"color: #993366;\\\"> FINO A 20 MILIONI DI EURO ALL'ANNO,<\\/span> IMMEDIATAMENTE FRUIBILE DA TUTTE LE AZIENDE per le annualit\\u00e0 2015-2020<br \\/><\\/strong>\"\n\t\t}\n\t},\n\t\"f03897c9-d636-4bcb-95bd-fe130f26d4f3\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Il credito d\\u2019imposta dovr\\u00e0 essere indicato nella dichiarazione dei redditi relativa al periodo d\\u2019imposta di sostenimento dei costi agevolati.\"\n\t\t}\n\t},\n\t\"8808f9b5-4460-4fcb-b623-83e0ba71f315\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<p>Il contributo, sotto forma di credito d'imposta, spetta nell\\u2019importo <strong>massimo annuale di 20.000.000 \\u20ac<\\/strong> per ciascuna annualit\\u00e0<strong> dal 2015 al 2020<\\/strong> per spese sostenute inerenti attivit\\u00e0 di sviluppo, innovazione tecnologica, progettazione e ricerca.<\\/p>\\r\\n<p>Le imprese possono <strong>recuperare fino al 50% delle spese<\\/strong> sostenute per progetti di ricerca e sviluppo.<\\/p>\\r\\n<ul>\\r\\n<li>50 % della spesa incrementale relativa al personale altamente qualificato e alla ricerca commissionata a terzi;<\\/li>\\r\\n<li>25 % della spesa incrementale delle quote di ammortamento degli strumenti e attrezzature nonch\\u00e9 di quella relativa a competenze e personale tecnico.<\\/li>\\r\\n<\\/ul>\\r\\n<p>Il credito di imposta per attivit\\u00e0 di ricerca e sviluppo deve ritenersi fruibile <strong>anche in presenza di altre misure di favore<\\/strong>, salvo che le norme disciplinanti le altre misure non dispongano diversamente.<\\/p>\"\n\t\t}\n\t},\n\t\"a158776a-7134-49f4-be57-5388c8d8e5ae\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<p>Sono ammissibili tutte le spese relative ad attivit\\u00e0 di <strong>ricerca e sviluppo di nuovi prodotti, progetti sperimentali, processi innovativi e ricerca industriale.<\\/strong><\\/p>\\r\\n<p>In particolare:<\\/p>\\r\\n<ul>\\r\\n<li>la ricerca pianificata, gli studi di fattibilit\\u00e0 e i lavori sperimentali mirati a mettere a punto nuovi prodotti, processi e servizi, o per permettere un miglioramento di quelli gi\\u00e0 prodotti dall\\u2019Impresa;<\\/li>\\r\\n<li>lo sviluppo di piani, progetti o disegni per prodotti, processi o servizi nuovi, modificati, o migliorati;<\\/li>\\r\\n<li>la produzione e il collaudo di nuovi prodotti, processi e servizi<\\/li>\\r\\n<li>progettazione software, multimediale e componentistica digitale;<\\/li>\\r\\n<li>misure, calcolo, certificazioni di prodotto;<\\/li>\\r\\n<\\/ul>\"\n\t\t}\n\t},\n\t\"ce654fde-2155-4c1b-9609-973a14e212ee\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<p><strong>Tutte le aziende italiane<\\/strong>, comprese le grandi imprese e quelle neo-costituite, possono fruire dell'agevolazione sotto forma di credito d'imposta.<\\/p>\"\n\t\t}\n\t},\n\t\"c8b2a21b-2b66-4af7-8289-a37db0fdc916\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t},\n\t\"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Credito d'Imposta\"\n\t\t}\n\t},\n\t\"d9221499-0b6f-4663-a122-1054038fc977\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutte le Regioni\"\n\t\t}\n\t},\n\t\"5260368d-ed28-4227-a76d-773461ecce68\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutti\"\n\t\t}\n\t},\n\t\"a8d4dab3-94b7-49b9-9ef1-63193fe5b405\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"2020-12-31 00:00:00\"\n\t\t}\n\t}\n}"," {\n\t\"efa6f15d-0028-45e3-b4b4-e35bff160d47\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/in_primo_piano\\/patent_box_regime_di_tassazione_agevolata_per_beni_materiali_ed_immateriali.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"link\": \"\",\n\t\t\t\"target\": \"0\",\n\t\t\t\"rel\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 758,\n\t\t\t\"height\": 428\n\t\t}\n\t},\n\t\"30c83720-6c74-4373-929c-4c45102c49c5\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/headers\\/patent_box_come_funziona.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 2500,\n\t\t\t\"height\": 300\n\t\t}\n\t},\n\t\"27598461-f4cb-4c80-bff9-23aa50f12c0f\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<strong>Patent Box<\\/strong> - <strong>Regime opzionale di tassazione agevolata<\\/strong> per i redditi derivanti dall\\u2019utilizzo diretto o indiretto di alcuni beni immateriali agevolabili.\"\n\t\t}\n\t},\n\t\"f03897c9-d636-4bcb-95bd-fe130f26d4f3\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<div style=\\\"text-align: justify;\\\">I soggetti interessati possono comunicare in via telematica l\\u2019opzione di adesione al regime di tassazione agevolata Patent Box all'Agenzia delle Entrate, compilando l\\u2019apposito modello per il periodo di imposta 2016.<\\/div>\"\n\t\t}\n\t},\n\t\"8808f9b5-4460-4fcb-b623-83e0ba71f315\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<div style=\\\"text-align: justify;\\\">L\\u2019incentivo consiste in una<strong> riduzione del reddito d\\u2019impresa<\\/strong> (base imponibile) <strong>soggetta ad imposte sul reddito (IRPEF e IRES) ed a IRAP.<\\/strong><\\/div>\\r\\n<p style=\\\"text-align: justify;\\\">La variazione in diminuzione del reddito imponibile <strong>\\u00e8 pari ad una percentuale del \\u201creddito agevolabile\\u201d (40% per il 2016 e 50% nei periodi successivi)<\\/strong>: il reddito agevolabile \\u00e8 calcolato mediante apposite formule e software specifico, per ciascun bene immateriale, applicando al reddito prodotto dallo sfruttamento del bene immateriale il risultato del rapporto tra i costi di ricerca e sviluppo sostenuti per il mantenimento, l\\u2019accrescimento e lo sviluppo del bene immateriale ed i costi complessivi sostenuti per il mantenimento, l\\u2019accrescimento e lo sviluppo del bene.<\\/p>\\r\\n<p style=\\\"text-align: justify;\\\"><span style=\\\"text-decoration: underline;\\\"><strong>L'agevolazione \\u00e8 cumulabile con altri regimi di aiuto attualmente in vigore, in particolare con gli incentivi alle startup e con il credito d'imposta per ricerca e sviluppo.<\\/strong><\\/span><\\/p>\"\n\t\t}\n\t},\n\t\"a158776a-7134-49f4-be57-5388c8d8e5ae\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<p style=\\\"text-align: justify;\\\">Sono ammissibili le <strong>spese legate ad attivit\\u00e0 di ricerca e sviluppo finalizzate allo sviluppo, al mantenimento, nonch\\u00e9 all\\u2019accrescimento di valore di software protetto da copyright, brevetti industriali, disegni e i modelli giuridicamente tutelabili e know-how<\\/strong> che si concretizza in un bene giuridicamente tutelabile.<\\/p>\\r\\n<p style=\\\"text-align: justify;\\\">Il beneficio compete non solo per gli intangibles sviluppati internamente dal contribuente, ma anche per <strong>quelli acquisiti presso terzi,<\\/strong> a condizione che l\\u2019impresa beneficiaria svolga su di essi attivit\\u00e0 di mantenimento, accrescimento e sviluppo. Il meccanismo di determinazione dell\\u2019agevolazione \\u00e8, ovviamente, tanto pi\\u00f9 premiante quanto maggiore \\u00e8 l\\u2019attivit\\u00e0 direttamente esercitata nella creazione e sviluppo dei beni tutelabili.<\\/p>\"\n\t\t}\n\t},\n\t\"ce654fde-2155-4c1b-9609-973a14e212ee\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<div style=\\\"text-align: justify;\\\">Possono fruire della tassazione agevolata le<strong> imprese residenti nel territorio italiano<\\/strong>. Non ci sono limitazioni alla forma giuridica e dunque possono accedere le societ\\u00e0 di capitali e la societ\\u00e0 di persona, le imprese individuali e gli enti commerciali.<\\/div>\\r\\n<p style=\\\"text-align: justify;\\\">Sono escluse le imprese assoggettate a procedure di fallimento, liquidazione coatta amministrativa e amministrazione straordinaria.<\\/p>\"\n\t\t}\n\t},\n\t\"c8b2a21b-2b66-4af7-8289-a37db0fdc916\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t},\n\t\"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tassazione Agevolata\"\n\t\t}\n\t},\n\t\"d9221499-0b6f-4663-a122-1054038fc977\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Nazionale\"\n\t\t}\n\t},\n\t\"5260368d-ed28-4227-a76d-773461ecce68\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutti\"\n\t\t}\n\t},\n\t\"a8d4dab3-94b7-49b9-9ef1-63193fe5b405\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t}\n}"," {\n\t\"efa6f15d-0028-45e3-b4b4-e35bff160d47\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/in_primo_piano\\/iperammortamento_industria_4.0-min.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"link\": \"\",\n\t\t\t\"target\": \"0\",\n\t\t\t\"rel\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 758,\n\t\t\t\"height\": 428\n\t\t}\n\t},\n\t\"30c83720-6c74-4373-929c-4c45102c49c5\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/headers\\/superammortamento_e_iperammortamento_1.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 2500,\n\t\t\t\"height\": 300\n\t\t}\n\t},\n\t\"27598461-f4cb-4c80-bff9-23aa50f12c0f\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"La Legge di Bilancio 2017 ha prorogato il super ammortamento, ossia la maggiorazione del 40% del costo fiscalmente riconosciuto dei <strong>beni strumentali nuovi<\\/strong>, ed ha introdotto<strong> l\\u2019iper ammortamento<\\/strong>, ossia una <strong>maggiorazione del 150% del costo di acquisizione di particolari tipologie di beni funzionali alla trasformazione tecnologica e\\/o digitale delle imprese in chiave Industria 4.0.<\\/strong>\"\n\t\t}\n\t},\n\t\"f03897c9-d636-4bcb-95bd-fe130f26d4f3\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t},\n\t\"8808f9b5-4460-4fcb-b623-83e0ba71f315\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Il beneficio si traduce in un<strong> incremento del costo di acquisizione del bene del 40% o del 150%<\\/strong>, che determina un <strong>aumento della quota annua di ammortamento<\\/strong> (o del canone annuo di leasing) <strong>fiscalmente deducibile.<\\/strong>\"\n\t\t}\n\t},\n\t\"a158776a-7134-49f4-be57-5388c8d8e5ae\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<strong>IPERAMMORTAMENTO<\\/strong><br \\/><br \\/>La <strong>maggiorazione del 150%<\\/strong> si applica per <strong>investimenti effettuati dal 1\\u00b0 gennaio 2017 al 31 dicembre 2017<\\/strong> (o entro il 30 settembre 2018, ma solo a condizione che entro il 31 dicembre 2017 l\\u2019ordine risulti accettato dal venditore e sia stato effettuato il pagamento in acconti in misura pari ad almeno il 20% del costo di acquisizione).<br \\/><br \\/>Sono agevolabili gli investimenti in macchine intelligenti, interconnesse, che possono essere raggruppati in tre categorie:<br \\/>\\r\\n<ul>\\r\\n<li>beni strumentali il cui funzionamento \\u00e8 controllato da sistemi computerizzati o gestito tramite opportuni sensori e azionamenti;<\\/li>\\r\\n<li>sistemi per l\\u2019assicurazione della qualit\\u00e0 e della sostenibilit\\u00e0;<\\/li>\\r\\n<li>dispositivi per l\\u2019interazione uomo macchina e per il miglioramento dell\\u2019ergonomia e della sicurezza del posto di lavoro in logica \\\"4.0\\\".<\\/li>\\r\\n<\\/ul>\\r\\n<p><strong>SUPERAMMORTAMENTO BENI IMMATERIALI<\\/strong><br \\/><br \\/>Sono agevolabili gli <strong>investimenti in beni immateriali<\\/strong> (software, sistemi e system integration, piattaforme e applicazioni) <strong>connessi a investimenti in beni materiali \\u00abIndustria 4.0\\u00bb.<\\/strong><\\/p>\\r\\n<p>Il beneficio \\u00e8 cumulabile con:<\\/p>\\r\\n<ul>\\r\\n<li>Nuova Sabatini<\\/li>\\r\\n<li>Credito d\\u2019imposta per attivit\\u00e0 di Ricerca e Sviluppo<\\/li>\\r\\n<li>Patent Box<\\/li>\\r\\n<li>Incentivi alla patrimonializzazione delle imprese (ACE)<\\/li>\\r\\n<li>Incentivi agli investimenti in Start up e PMI innovative<\\/li>\\r\\n<li>Fondo Centrale di Garanzia<\\/li>\\r\\n<\\/ul>\"\n\t\t}\n\t},\n\t\"ce654fde-2155-4c1b-9609-973a14e212ee\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<p><strong>IPERAMMORTAMENTO<\\/strong><br \\/><br \\/>Sono ammessi all\\u2019agevolazione unicamente <strong>i titolari di reddito d\\u2019impresa, indipendentemente dalla natura giuridica, dalla dimensione aziendale e dal settore economico in cui operano.<\\/strong><\\/p>\\r\\n<p>Sono ammesse all\\u2019agevolazione <strong>sia le imprese residenti nel territorio dello Stato che le stabili organizzazioni nel territorio dello Stato di soggetti non residenti.<\\/strong> Sono ammessi gli enti non commerciali con riferimento all\\u2019attivit\\u00e0 commerciale eventualmente esercitata.<br \\/><br \\/><strong>SUPERAMMORTAMENTO BENI IMMATERIALI<\\/strong><\\/p>\\r\\n<p>Per i <strong>soggetti imprenditoriali che beneficiano di iperammortamento<\\/strong> \\u00e8 possibile dedurre dall\\u2019imponibile un ammontare<strong> pari al 140%<\\/strong> (come nel caso del super ammortamento) del costo di acquisizione di alcuni beni immateriali specificamente individuati dal legislatore. Le scadenze temporali sono le medesime previste per l\\u2019iperammortamento.<\\/p>\"\n\t\t}\n\t},\n\t\"c8b2a21b-2b66-4af7-8289-a37db0fdc916\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t},\n\t\"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Deduzione IRES \\/ IRPEF\"\n\t\t}\n\t},\n\t\"d9221499-0b6f-4663-a122-1054038fc977\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutte le Regioni\"\n\t\t}\n\t},\n\t\"5260368d-ed28-4227-a76d-773461ecce68\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutti\"\n\t\t}\n\t},\n\t\"a8d4dab3-94b7-49b9-9ef1-63193fe5b405\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"2018-09-30 00:00:00\"\n\t\t}\n\t}\n}","{\n\t\"efa6f15d-0028-45e3-b4b4-e35bff160d47\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/in_primo_piano\\/bando_emilia_romagna_fiere_estero-min_1.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"link\": \"\",\n\t\t\t\"target\": \"0\",\n\t\t\t\"rel\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 758,\n\t\t\t\"height\": 428\n\t\t}\n\t},\n\t\"30c83720-6c74-4373-929c-4c45102c49c5\": {\n\t\t\"0\": {\n\t\t\t\"file\": \"images\\/headers\\/header_formazione_4.0-min.jpg\",\n\t\t\t\"title\": \"\",\n\t\t\t\"file2\": \"\",\n\t\t\t\"overlay_effect\": \"\",\n\t\t\t\"caption\": \"\",\n\t\t\t\"width\": 2500,\n\t\t\t\"height\": 300\n\t\t}\n\t},\n\t\"27598461-f4cb-4c80-bff9-23aa50f12c0f\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<strong>Credito d'imposta a favore di tutte le imprese, per attivit\\u00e0 di formazione dirette ad acquisire e consolidare le conoscenze tecnologiche \\u00abIndustria 4.0\\u00bb.<\\/strong>\"\n\t\t}\n\t},\n\t\"f03897c9-d636-4bcb-95bd-fe130f26d4f3\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Il credito d\\u2019imposta sar\\u00e0 utilizzabile<strong> esclusivamente in compensazione<\\/strong> a decorrere dal periodo d\\u2019imposta successivo a quello in cui i costi sono sostenuti, presentando il modello F24 esclusivamente attraverso i servizi telematici messi a disposizione dall\\u2019Agenzia delle Entrate.\"\n\t\t}\n\t},\n\t\"8808f9b5-4460-4fcb-b623-83e0ba71f315\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"ll bonus \\u00e8 attributo nella <strong>misura del 40% delle spese ammissibili,<\\/strong> con un <strong>massimo di 300.000 euro<\\/strong> per ciascuna impresa beneficiaria.\"\n\t\t}\n\t},\n\t\"a158776a-7134-49f4-be57-5388c8d8e5ae\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"<p><span class=\\\"oe_form_text_content\\\">Sono ammissibili al credito d\\u2019imposta le attivit\\u00e0 di formazione finalizzate all\\u2019acquisizione o al consolidamento, da parte del personale dipendente dell\\u2019impresa, delle competenze nelle tecnologie rilevanti per la realizzazione del processo di trasformazione tecnologica e digitale delle imprese previsto dal \\u201cPiano nazionale Impresa 4.0\\u201d. <\\/span><\\/p>\\r\\n<p><span class=\\\"oe_form_text_content\\\">Costituiscono in particolare attivit\\u00e0 ammissibili al credito d\\u2019imposta le attivit\\u00e0 di formazione concernenti le seguenti tecnologie: <\\/span><\\/p>\\r\\n<ul>\\r\\n<li><span class=\\\"oe_form_text_content\\\">big data e analisi dei dati; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">cloud e fog computing; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">cyber security; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">simulazione e sistemi cyber-fisici; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">prototipazione rapida; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">sistemi di visualizzazione, realt\\u00e0 virtuale e realt\\u00e0 aumentata; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">robotica avanzata e collaborativa; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">interfaccia uomo macchina; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">manifattura additiva (o stampa tridimensionale); <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">internet delle cose e delle macchine; <\\/span><\\/li>\\r\\n<li><span class=\\\"oe_form_text_content\\\">integrazione digitale dei processi aziendali.<\\/span><\\/li>\\r\\n<\\/ul>\"\n\t\t}\n\t},\n\t\"ce654fde-2155-4c1b-9609-973a14e212ee\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Possono accedere al credito d\\u2019imposta:<br \\/>\\r\\n<ul>\\r\\n<li>Imprese residenti in Italia, indipendentemente dalla natura giuridica, dal settore economico di appartenenza, dalla dimensione, dal regime contabile e dal sistema di determinazione del reddito ai fini fiscali.<\\/li>\\r\\n<li>Enti non commerciali residenti svolgenti attivit\\u00e0 commerciali rilevanti ai fini del reddito d'impresa.<\\/li>\\r\\n<li>Imprese residenti all'estero con stabili organizzazioni sul territorio italiano.<\\/li>\\r\\n<\\/ul>\"\n\t\t}\n\t},\n\t\"c8b2a21b-2b66-4af7-8289-a37db0fdc916\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t},\n\t\"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Credito D'Imposta\"\n\t\t}\n\t},\n\t\"d9221499-0b6f-4663-a122-1054038fc977\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutte le Regioni\"\n\t\t}\n\t},\n\t\"5260368d-ed28-4227-a76d-773461ecce68\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"Tutti i Settori\"\n\t\t}\n\t},\n\t\"a8d4dab3-94b7-49b9-9ef1-63193fe5b405\": {\n\t\t\"0\": {\n\t\t\t\"value\": \"\"\n\t\t}\n\t}\n}"]
Under EcmaScript 5, you can use Object.entries and create an array of keys and its values to iterate like you want in your question:
var words = {
"efa6f15d-0028-45e3-b4b4-e35bff160d47":{ id: 1 },
"30c83720-6c74-4373-929c-4c45102c49c5":{ },
"27598461-f4cb-4c80-bff9-23aa50f12c0f":{ },
"f03897c9-d636-4bcb-95bd-fe130f26d4f3":{ },
"8808f9b5-4460-4fcb-b623-83e0ba71f315":{ },
"a158776a-7134-49f4-be57-5388c8d8e5ae":{ },
"ce654fde-2155-4c1b-9609-973a14e212ee":{ },
"c8b2a21b-2b66-4af7-8289-a37db0fdc916":{ },
"caf78a08-2f4f-4561-8c2f-49bb3fb4bc43":{ },
"d9221499-0b6f-4663-a122-1054038fc977":{ },
"5260368d-ed28-4227-a76d-773461ecce68":{ },
"a8d4dab3-94b7-49b9-9ef1-63193fe5b405":{ }
};
const result = Object.keys(words)
.map(key => {
let obj = {};
obj[key] = words[key];
return obj;
});
console.log(result);
UPDATE:
You have an object, not array. So this code arra.length will have value undefined because this code res as any[] does not creates an array. It is just tries to cast your object to array. So try to use the above code to create an array.
So you should iterate your object using for - in loop and your code can look like this:
for (let key in words) {
if (words.hasOwnProperty(key)) {
console.log(`The key of object is ${ key }, the value of object is:`, words[key]);
}
}

Does ocamldoc generate documentation for functions?

I'm using ocamldoc to generate the documentation of my program. My code is not particularly big yet, I just have one function, but when I open the HTML the function documentation doesn't appear in any of the files generated by ocamldoc.
I use ocamldoc -all-params arbol\ binario.ml to generate the HTML
I read the documentation for ocamldoc and I used the flag -all-params but it didn't work either. Also I created a simple non-recursive function but it's the same output.
(** #author Roldan Rivera Luis Ricardo
#author Foo*)
(**Este modulo contiene la implementacion de una arbol binario
de busqueda BST (acrónimo del inglés Binary Search Tree)
con sus funciones basicas.
{b funciones}
- {! Crear}
- {! Insertar}
- {! Buscar}
- {! Recorrer}*)
(** Tipo de dato llamado Tree, la notacion 'a (alfa) indica que es un
tipo de dato polimorfico, es decir que puede soportar
cualquier tipo de dato. *)
type 'a tree =
| Branch of 'a * 'a tree * 'a tree (** Un elemento * sub-arbol izquierdo * sub-arbol derecho *)
| Leaf (** El fin de una rama, significa que ya no hay mas sub-arboles, equivalente al Nil *)
(** Busca el dato deseado en el arbol
#param tree Arbol donde se va a realizar la busqueda
#param x El valor a buscar
#return None Si no se encuentra el dato en el arbol*)
let rec buscar tree x =
match tree with
| Leaf -> None
| Branch(k,left,right) ->
if k = x then Some x
else if x < k then buscar left x
else buscar right x
Did you forget to precise the html backend (also you should not put space in module name)?
Running ocamldoc with
ocamldoc -html -all-params filename.ml
should print the following documentation for the function:
<pre><span id="VALbuscar"><span class="keyword">val</span> buscar</span> : <code class="type">'a tree -> 'a -> 'a option</code></pre><div class="info ">
<div class="info-desc">
<p>Busca el dato deseado en el arbol</p>
</div>
<ul class="info-attributes">
<li><b>Returns</b> None Si no se encuentra el dato en el arbol</li>
</ul>
</div>
<div class="param_info"><table border="0" cellpadding="3" width="100%">
<tr>
<td align="left" valign="top" width="1%"><b>Parameters: </b></td>
<td>
<table class="paramstable">
<tr>
<td align="center" valign="top" width="15%" class="code">
tree</td>
<td align="center" valign="top">:</td>
<td><div class="paramer-type">
<code class="type">'a tree</code><div>
Arbol donde se va a realizar la busqueda
</tr>
<tr>
<td align="center" valign="top" width="15%" class="code">
x</td>
<td align="center" valign="top">:</td>
<td><div class="paramer-type">
<code class="type">'a</code><div>
El valor a buscar
</tr>
</table>
</td>
</tr>
</table></div>