Regex get code and description in a not well-formed txt - regex

As a PDF conversion of a table yelds:
8703.60.00 - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão alternativo de ignição por centelha (faísca*) e um
motor elétrico, suscetíveis de serem carregados por conexão a uma
fonte externa de energia elétrica 25
Ex 01 - De cilindrada não superior a 1.000 cm3 7
Ex 02 - De cilindrada superior a 1.000 cm3, mas não superior a 2.000
cm3 13
8703.70.00 - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão de ignição por compressão (diesel ou semidiesel) e
um motor elétrico, suscetíveis de serem carregados por conexão a
uma fonte externa de energia elétrica 25
8703.80.00 - Outros veículos, equipados unicamente com motor elétrico para
propulsão 25
8703.90.00 - Outros
I'm trying with this pattern:
/(\d{2,4}\.\d{1,2}|\d{2,4}\.\d{1,2}\.\d{1,2})\s{2,}(.*)/s
But I can't find a way to stop group evaluation (the last (.*) of regex pattern) and get all codes and descriptions.
In another way, if I remove /s from pattern, I got all codes, but descriptions came incomplete (Only return descriptions before first \n).
How can I get all codes and descriptions after new lines?
Follow my tests:
https://regex101.com/r/PdtQCf/1

How about this:
(\d{2,4}\.\d{1,2}|\d{2,4}\.\d{1,2}\.\d{1,2})\s{2,}(.*(?:\n(?!)\s{4,}.*)*)
It's your original regex, with the addition of checking for a linefeed followed by at least 4 (an arbitrary number to avoid page headers) space characters (except FF (i guess it is)) and then anything up to a linefeed. This last part can be repeated any number of times.
Here at regex101.

$string = <<<EOD
8703.60.00 - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão alternativo de ignição por centelha (faísca*) e um
motor elétrico, suscetíveis de serem carregados por conexão a uma
fonte externa de energia elétrica 25
Ex 01 - De cilindrada não superior a 1.000 cm3 7
Ex 02 - De cilindrada superior a 1.000 cm3, mas não superior a 2.000
cm3 13
8703.70.00 - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão de ignição por compressão (diesel ou semidiesel) e
um motor elétrico, suscetíveis de serem carregados por conexão a
uma fonte externa de energia elétrica 25
8703.80.00 - Outros veículos, equipados unicamente com motor elétrico para
propulsão 25
8703.90.00 - Outros
EOD;
preg_match_all('/(\d{2,4}\.\d{1,2}|\d{2,4}\.\d{1,2}\.\d{1,2})\s{2,}((?:.*?\R(?:\h+|$))*)/', $string, $match);
print_r($match);
Explanation:
/ : regex delimiter
( : start group #1
\d{2,4}\.\d{1,2}
|
\d{2,4}\.\d{1,2}\.\d{1,2}
) : end group #1
\s{2,} : 2 or more spaces
( : start group #2
(?: : start non capture group
.*? : 0 or more any character but newline
\R : any kind of linebreak
(?: : start non capture group
\h+ : 1 or more horizontal spaces
| : OR
$ : end of string
) : end group
)* : end group, 0 or more occurrences
) : end group #2
/ : regex delimiter. NO 's' modifier
Output:
Array
(
[0] => Array
(
[0] => 8703.60.00 - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão alternativo de ignição por centelha (faísca*) e um
motor elétrico, suscetíveis de serem carregados por conexão a uma
fonte externa de energia elétrica 25
Ex 01 - De cilindrada não superior a 1.000 cm3 7
Ex 02 - De cilindrada superior a 1.000 cm3, mas não superior a 2.000
[1] => 8703.70.00 - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão de ignição por compressão (diesel ou semidiesel) e
um motor elétrico, suscetíveis de serem carregados por conexão a
[2] => 8703.80.00 - Outros veículos, equipados unicamente com motor elétrico para
[3] => 8703.90.00 - Outros
)
[1] => Array
(
[0] => 8703.60.00
[1] => 8703.70.00
[2] => 8703.80.00
[3] => 8703.90.00
)
[2] => Array
(
[0] => - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão alternativo de ignição por centelha (faísca*) e um
motor elétrico, suscetíveis de serem carregados por conexão a uma
fonte externa de energia elétrica 25
Ex 01 - De cilindrada não superior a 1.000 cm3 7
Ex 02 - De cilindrada superior a 1.000 cm3, mas não superior a 2.000
[1] => - Outros veículos, equipados para propulsão, simultaneamente, com um
motor de pistão de ignição por compressão (diesel ou semidiesel) e
um motor elétrico, suscetíveis de serem carregados por conexão a
[2] => - Outros veículos, equipados unicamente com motor elétrico para
[3] => - Outros
)
)

Related

How do I delete text between two characters in notepad++

I have sql file with Thousands of SQL inserts, like this:
INSERT INTO `wpxl_posts` (`ID`, `post_author`, `post_date`, `post_content`, `post_title`, `post_status`, `post_name`, `post_modified`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES
(67439, 1, '2014-05-16 18:05:11', '<p>\r\n Punta Arenas. 17 mayo 2014. Un detallada exposición de lo que será el sistema de tronaduras para remover la capa esteril o superficial de la Mina Invierno, realizó ayer el gerente de Sustentabilidad y Gestión de la empresa carbonífera, Patricio Alvarado. El ejecutivo indicó que las vibraciones de las explosiones no serán perceptibles fuera del yacimiento y que por un lapso de 2 segundos el ruido que emitirá será como el de una persona gritando o una calle con alto tránsito.</p>\r\n<p>\r\n Alvarado también indicó que este procedimiento está regulado por el Sernageomin y por Carabineros y que se utiliza poco explosivo el que es mezclado con diesel, componentes que se evaporan tras la explosición. Estiman, una vez que se obtenga la autorización, realizar hasta tres tronaduras a la semana.</p>\r\n<p>\r\n Consultado el Gerente Regional, Guillermo Hernández, sobre las razones por las que la empresa desea incorporar esta técnica, el ejecutivo explicó que al ir avanzando la explotación del rajo se encontraron con terreno algo más resistente al explorado originalmente y que por ello el rendimiento de la maquinaria que se utiliza para remover el esteril ha sido menor. La expectativa de los ejecutivos es que con las tornaduras se pueda ascelerar el proceso de retiro del esteril para posteriormente extraer el carbon utilizando las mismas técnicas que actualmente se usan.</p>\r\n<p>\r\n Sebastián Gil, Gerente General de Mina Invierno, dijo que la empresa mantuvo una reunión con el Servicio de Evaluación Ambiental (SEA), entre otros entes de Gobierno, "en la que les explicamos lo que la compañía quiere hacer". El ejecutivo dijo que la expectativa de la empresa es implementar esta técnica a partir del próximo año dado los tiempos de evaluación y respuestas que se deben realizar por parte del SEA y de Mina Invierno.</p>\r\n', 'Mina Invierno asegura que vibraciones de tronaduras no se sentirán fuera del yacimiento ', '', 'm-2', '2014-05-19 08:05:59', 0, ' ', 0, 'post', '', 0, 'fe9c3739.jpg'),
(69129, 1, '2014-08-30 13:08:03', '<p>\r\n a</p>\r\n', 'a', '', 'a-4', '2014-08-30 13:08:26', 0, ' ', 0, 'post', '', 0),
(13, 1, '2010-05-12 16:30:02', '<p style=\"text-align: justify;\"><img class=\"alignleft size-full wp-image-14\" style=\"border: black 2px solid;\" title=\"consorcio aeropuerto\" src=\"http://www.dialogosur.cl/wp-content/uploads/2010/05/noticia3.jpg\" alt=\"\" width=\"280\" height=\"282\" />A partir de hoy, el Consorcio Aeroportuario Magallanes administrará Aeropuerto Carlos Ibáñez del Campo, teniendo un acuerdo para la construcción y remodelación del Terminal con la empresa constructora Salfa.</p>\r\n<p style=\"text-align: justify;\">A poco más de un año en que comenzó el proceso de licitación del Aeropuerto Carlos Ibáñez del Campo, en el cual participaron 5 empresas, el Consorcio Aeroportuario Magallanes – filial de Agunsa- asume el control oficial del Terminal Aéreo de Punta Arenas.</p>\r\n<p style=\"text-align: justify;\">La concesión implicará la ejecución de todo el proyecto, así como la conservación de las obras y la explotación de los servicios aeronáuticos y no aeronáuticos conforme a lo establecido en las bases de licitación.</p>\r\n<p style=\"text-align: justify;\">Con una inversión de 13 millones de dólares, la nueva concesión contempla la ampliación de 6.240 m2 a 7.700 m2 en el mejoramiento del Terminal de Pasajeros, que en una primera etapa contempla nuevas oficinas para líneas aéreas, señalética y climatización, ente otras iniciativas. También se pretende construir una nueva Torre de Control, una planta de tratamiento de aguas servidas, se mejorará la actual infraestructura vial, la red de alcantarillado, aguas lluvias y la iluminación de Plataforma.</p>\r\n<p style=\"text-align: justify;\">Además la concesión contempla mejorar el área de servicios, ampliando la oferta del Terminal, dotándolo con mayores counters para compañías aéreas y la gestión de estacionamientos públicos y de custodia, transporte público, rent a car, servicios financieros y salones VIP, entre otros.</p>\r\n<p style=\"text-align: justify;\">Al respecto Luis Mancilla, Gerente General de Agunsa destacó la amplia experiencia que posee la empresa en la concesiones de terminales aéreos, recordando que actualmente son socios en SCL, empresa que administra el aeropuerto Arturo Merino Benítez de Santiago, el más grande del país, y además operadores del Aeropuerto de las islas de San Andrés y Providencia en Colombia.\r\n“Creemos –agregó Mansilla- que Agunsa tiene mucho que ofrecer al desarrollo aeroportuario de Magallanes, potenciando el tráfico de personas y carga, asociadas a las actividades productivas de la zona austral, tales como el turismo y la proyección antártica, entre otras.”</p>\r\n<p style=\"text-align: justify;\">Por su parte, el Gerente General de la Concesionaria, Andrés Schultz hizo hincapié en el alto grado de entendimiento que ha existido con los prestadores de servicios del anterior contrato, como así también, con la estabilidad laboral de los trabajadores de la concesionaria anterior. “Aunque el contrato no nos exige mantener a los mismos trabajadores, hemos considerado que las personas que se desempeñaban en este terminal cuentan con una experiencia valiosa y por ello la mayoría han mantenido sus empleos”, aseguró Schultz</p>\r\n<p style=\"text-align: justify;\">Según explica Luis Mansilla, haber presentado la mejor oferta para el Aeropuerto de Punta Arenas, y la adjudicación del Terminal, significa un nuevo desafío en la expansión de su red de prestaciones de servicios de transporte marítimo, aéreo y terrestre, que ofrece la compañía a lo largo de todo el país y a nivel mundial, obedeciendo a su política de diversificación de negocio, sobre todo en la Zona Austral de Chile.</p>\r\n<p style=\"text-align: justify;\">AGUNSA pertenece al Holding Empresas Navieras, Grupo que además de estar en el negocio del transporte puerta a puerta a nivel global, participando activamente en inversiones de infraestructura portuaria y aérea, servicios de cargas y pasajeros; representaciones de operadores de transporte, tanto marítimo como aéreo; equipos terrestres y a flote; almacenaje y distribución de productos y, en general, todo lo relacionado con el transporte y servicios de carga , tanto de importación, exportación y cabotaje.</p>', 'Consorcio Aeroportuario de Magallanes asume concesión de aeropuerto Carlos Ibáñez Del Campo', '1', 'consorcio-aeroportuario-de-magallanes-asume-concesion-de-aeropuerto-carlos-ibanez-del-campo', '2010-05-18 13:38:28', 0, 'http://www.dialogosur.cl/?p=13', 0, 'post', '', 0, NULL),
(18, 1, '2010-05-12 21:24:45', '<p style=\"text-align: justify;\"><img class=\"alignleft size-full wp-image-17\" title=\"ningun proyecto social suspendido\" src=\"http://www.dialogosur.cl/wp-content/uploads/2010/05/opinion2gde.jpg\" alt=\"\" width=\"280\" height=\"184\" />Tras reunión en La Moneda, el Vicepresidente garantizó a los municipios que presupuesto de 2010 será superior al de años anteriores.</p>\r\n<p style=\"text-align: justify;\">El Vicepresidente de la República Rodrigo Hinzpeter garantizó hoy a los municipios que los presupuestos regionales del año 2010 serán superiores a los de 2008 y 2009, esto en una clara señal de tranquilidad, luego que la Asociación Chilena de Municipalidades advirtiera una merma significativa en el presupuesto debido a los gastos por el terremoto y tsunami de febrero pasado.</p>\r\n<p style=\"text-align: justify;\">Hinzpeter se reunió con la mesa directiva de la asociación, encabezada por su titular el alcalde de la Granja, Claudio Arriagada, además de ediles de las zonas devastadas.</p>\r\n<p style=\"text-align: justify;\">\"Les hemos garantizado que durante 2010 los presupuestos regionales van a estar en el marco de lo que se había considerado, y en todo caso van a ser superiores al promedio de los presupuestos de los años 2008 y 2009, dijo el Vicepresidente y agregó que \"ningún proyecto regional va a ser suspendido, los proyectos que habían iniciado su ejecución van a continuar su marcha y es probable que algunos, sólo algunos, sufran una postergación, pero nuestro compromiso es apoyar a todos los gobiernos regionales en la ejecución de los proyectos\".</p>\r\n<p style=\"text-align: justify;\">Hinzpeter explicó que ya se ha entregado cerca de $50 mil millones para las regiones.</p>', 'Hinzpeter: \"ningún proyecto regional va a ser suspendido\"', '1', 'hinzpeter-ningun-proyecto-regional-va-a-ser-suspendido', '2010-05-12 21:51:00', 0, 'http://www.dialogosur.cl/?p=18', 0, 'post', '', 0, NULL),
(38, 1, '2010-05-13 18:11:04', '<p style=\"text-align: justify;\"><img class=\"alignleft size-full wp-image-39\" title=\"festival folklorico solidariza con victimas\" src=\"http://www.dialogosur.cl/wp-content/uploads/2010/05/noticia2.jpg\" alt=\"\" width=\"280\" height=\"271\" />La comisión organizadora del XXX Festival Folclórico en la Patagonia, presidida por el Municipio de Punta Arenas, realizó el lanzamiento de las bases del evento, que se llevará a cabo el 15, 16 y 17 de julio en el Gimnasio Fiscal.</p>\r\n<p style=\"text-align: justify;\">En esta oportunidad, el certamen será de carácter benéfico y todo lo recaudado irá en ayuda de los damnificados por el terremoto que afectó a las zonas centro y sur del país EL 27 de febrero.</p>\r\n<p style=\"text-align: justify;\">El presidente de la Comisión de Cultura del Consejo Municipal e integrante de la Comisión Organizadora, José Aguilante, se manifestó muy contento con el hecho de poder contar con el Gimnasio Fiscal para este evento tan importante, ya que el recinto permite albergar a una mayor cantidad de público.</p>\r\n<p style=\"text-align: justify;\">“Queremos agradecer a la gente de Chiledeportes, ya que si bien en un momento pensamos que no se iba a poder contar con este recinto porque iba a estar sometido a reparaciones, la buena voluntad del organismo permitió que se postergaran las obras para llevar adelante el evento”, señaló Aguilante.</p>\r\n<p style=\"text-align: justify;\">Hasta el momento ya son 27 los números que amenizarán las 3 jornadas, todos quienes han comprometido su actuación gratuita, por lo que los organizadores sólo deberán costear el traslado, alojamiento y alimentación de los artistas, cifra que ascenderá a cerca de 30 millones de pesos.</p>\r\n<p style=\"text-align: justify;\">Además, en lo que será su versión bicentenario, y como una manera de conmemorar los 30 años de realización del evento, se llevará a cabo un homenaje a las mejores 30 canciones que han marcado el Festival de la Patagonia.</p>\r\n<p style=\"text-align: justify;\">Respecto a la competencia, la comisión organizadora señaló que participarán de ella un total de 6 canciones, de las cuales 2 serán de nuestra región, 2 de origen extranjero y 2 del resto del país.</p>\r\n<p style=\"text-align: justify;\">En cuanto al costo de las entradas, el Vicepresidente de la Comisión Organizadora, Pedro Sánchez, señaló que “la idea es que éstas sirvan para aminorar los gastos en que se deba incurrir para la atención de los artistas, y personalmente velaré para que las mejores ubicaciones tengan un mayor valor de venta para el público”.</p>\r\n<p style=\"text-align: justify;\">Las inscripciones estarán abiertas hasta el 4 de junio ya que el 11 del mismo mes comenzará la preselección de los temas en competencia.</p>', 'Festival folclórico en la Patagonia solidariza con víctimas de terremoto', '1', 'festival-folclorico-en-la-patagonia-solidariza-con-victimas-de-terremoto', '2010-05-13 18:11:04', 0, 'http://www.dialogosur.cl/?p=38', 0, 'post', '', 1, NULL),
I need to remove the last field of each insert, last field can be one of this two options:
, 'fe9c3739.jpg'),
or
NULL),
I tried to use the search tool of notepad++ in order to replace the last field with an empty space.
I tried this way
But it doesn't work, How can i replace the last field with an empty space?
The file looks like an SQL command. In SQL, strings may contain double literal single quotes. So the safest regex here would be
,\h*(?:'[^']*(?:''[^']*)*'|NULL)\),$
Replace with \),.
Regex details
, - a comma
\h* - zero or more horizontal whitespaces
(?:''[^']*(?:''[^']*)*|NULL) - either of the two alternatives:
'[^']*(?:''[^']*)* - a single quote, then any 0 or more chars other than single quote, then 0 or more sequences of double single quote followed with 0 or more chars other than single quotes and then a single quote
\), - a closing parenthesis and a comma at the
$ - end of a line.
My guess is that this expression might likely work to get or almost collect our target inputs,
,\s*'[^\s]+\.jpg'\)|,\s*NULL\)
to be replaced with just a ).
Demo
In Notepad++ the parenthesis in the replace part have to be escaped.
Find what: ,[^,)]+\)
Replace with: \)
Or
Find what: ,[^,)]+(?=\))
Replace with: LEAVE EMPTY
Try this regex: ,{1}$
Example here: https://regex101.com/r/0G9spl/1
The last field on each line
Find (?m)(?:(?:^|,)\h*)(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([^,\r\n]*))(?=\h*\)(?!.*\)))
Replace with empty string
https://regex101.com/r/vTvrCT/1
Explained
(?m) # Multi-line mode
(?: # leading comma + optional whitespaces
(?: ^ | , )
\h*
)
(?: # Cluster group, the last field on each line
"
( # (1 start), double quoted string data
[^"\\]*
(?: \\ . [^"\\]* )*
) # (1 end)
"
| # OR
'
( # (2 start), single quoted string data
[^'\\]*
(?: \\ . [^'\\]* )*
) # (2 end)
'
| # OR
( [^,\r\n]* ) # (3), non-quoted field
)
(?=
\h* \)
(?! .* \) )
)

regular expression to search text

I'm trying to get the text string that is between UBICADO and COMUNA
I am occupying the following regular expression " ((ubicado) =?).* " but I do not know how to arm it so that it takes up "comuna"
"departamento número veintidós del segundo piso, señalan, ubicado en calle Victoria Subercaseaux número ciento noventa y uno, Comuna de Santiago, Región Metropolitana, y demás derechos en los bienes comunes, en proporción al valor del mismo, entre los cuales se encuentra el terreno, que deslinda: NORTE, calle Valdivia; SUR, propiedad de doña Laura Zegers de"

RegExp pattern to find words [duplicate]

This question already has answers here:
regex to match a single character that is anything but a space
(3 answers)
Closed 4 years ago.
I know this seems a duplicated question but I can't find what I need.
I want to make a TextView (Android) where each word is clickable, but I need to match every sequence of characters unless whitespaces, so something like "hello!" or "«tomorrow" or "días" are valid matches for me.
So I don't need the pattern to find whitespaces, because I don't want split.
My scenario is Android but I only need the regexp, I'm playing with http://regexr.com/ to test and one example text to test is:
Con cien cañones por banda, viento en popa a toda vela, no corta el
mar, sino vuela, un velero bergantín: bajel pirata que llaman por su
bravura el Temido, en todo mar conocido del uno al otro confín. La
luna en el mar riela, en la lona gime el viento, y alza en blando
movimiento olas de plata y azul; y ve el capitán pirata, cantando
alegre en la popa, Asia a un lado, al otro Europa y allá a su frente
Stambul. «Navega, velero mío, sin temor, que ni enemigo navío, ni
tormenta, ni bonanza, tu rumbo a torcer alcanza, ni a sujetar tu
valor. «Veinte presas hemos hecho a despecho del inglés, y han rendido
sus pendones cien naciones a mis pies. «¿Qué es mi barco? Mi tesoro.
¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi
única patria? ¡La mar! «Allá muevan feroz guerra ciegos reyes por un
palmo más de tierra: que yo tengo aquí por mío cuanto abarca el mar
bravío, a quien nadie impuso leyes. «Y no hay playa sea cual quiera,
ni bandera de esplendor, que no sienta mi derecho y dé pecho a mi
valor. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi
ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «A la voz de
«¡barco viene!» Es de ver cómo vira y se previene a todo trapo a
escapar: que yo soy el rey del mar, y mi furia es de temer. «En las
presas yo divido lo cogido por igual: sólo quiero por riqueza la
belleza sin rival. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La
libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar!
«¡Sentenciado estoy a muerte! Yo me río: no me abandone la suerte, y
al mismo que me condena, colgaré de alguna antena, quizá en su propio
navío. «Y si caigo, ¿qué es la vida? Por perdida ya la di cuando el
yugo del esclavo, como un bravo, sacudí. «¿Qué es mi barco? Mi tesoro.
¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi
única patria? ¡La mar! «Son mi música mejor aquilones; el estrépito y
temblor de los cables sacudidos, del negro mar los bramidos y el rugir
de mis cañones. «Y del trueno al son violento, y del viento al
rebramar, yo me duermo sosegado. Arrullado por el mar. «¿Qué es mi
barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y
el viento! ¿Mi única patria? ¡La mar!
You have almost answered your question by yourself.
"Every sequence of characters unless whitespaces" - it is exactly /([^\s])+/g

getline() doesn't end long input

I need to input in my program a big string until the user types a delim char and I've written this code:
int main(int argc, const char * argv[]) {
string str, temp;
string c;
cout << "Insert delim char:" << endl;
getline(cin, c);
cout << "Delim: " << c[0] << endl;
cout << "Insert string:" << endl;
getline(cin, str, c[0]);
cout << str;
return 0;
}
However, if try to input a very big string the program doesn't stop the input and it doesn't go on with the algorithm.
Output:
**Insert delim char:**
*
**Insert string:**
Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura
esta selva selvaggia e aspra e forte
che nel pensier rinova la paura!
Tant' è amara che poco è più morte;
ma per trattar del ben ch'i' vi trovai,
dirò de l'altre cose ch'i' v'ho scorte.
Io non so ben ridir com' i' v'intrai,
tant' era pien di sonno a quel punto
che la verace via abbandonai.
Ma poi ch'i' fui al piè d'un colle giunto,
là dove terminava quella valle
che m'avea di paura il cor compunto,
guardai in alto e vidi le sue spalle
vestite già de' raggi del pianeta
che mena dritto altrui per ogne calle.
Allor fu la paura un poco queta,
che nel lago del cor m'era durata
la notte ch'i' passai con tanta pieta.
E come quei che con lena affannata,
uscito fuor del pelago a la riva,
si volge a l'acqua perigliosa e guata,
così l'animo mio, ch'ancor fuggiva,
si volse a retro a rimirar lo passo
che non lasciò già mai persona viva.
Poi ch'èi posato un poco il corpo lasso,
ripresi via per la piaggia diserta,
sì che 'l piè fermo sempre era 'l più basso.
Ed ecco, quasi al cominciar de l'erta,
una lonza leggiera e presta molto,
che di pel macolato era coverta;
e non mi si partia dinanzi al volto,
anzi 'mpediva tanto il mio cammino,
ch'i' fui per ritornar più volte vòlto.
Temp' era dal principio del mattino,
e 'l sol montava 'n sù con quelle stelle
ch'eran con lui quando l'amor divino
mosse di prima quelle cose belle;
sì ch'a bene sperar m'era cagione
di quella fiera a la gaetta pelle
l'ora del tempo e la dolce stagione;
ma non sì che paura non mi desse
la vista che m'apparve d'un leone.
Questi parea che contra me venisse
con la test' alta e con rabbiosa fame,
sì che parea che l'aere ne tremesse.
Ed una lupa, che di tutte brame
sembiava carca ne la sua magrezza,
e molte genti fé già viver grame,
questa mi porse tanto di gravezza
con la paura ch'uscia di sua vista,
ch'io perdei la speranza de l'altezza.
E qual è quei che volontieri acquista,
e giugne 'l tempo che perder lo face,
che 'n tutti suoi pensier piange e s'attrista;
tal mi fece la bestia sanza pace,
che, venendomi 'ncontro, a poco a poco
mi ripigneva là dove 'l sol tace.
Mentre ch'i' rovinava in basso loco,
dinanzi a li occhi mi si fu offerto
chi per lungo silenzio parea fioco.
Quando vidi costui nel gran diserto,
«Miserere di me», gridai a lui,
«qual che tu sii, od ombra od omo certo!».
Rispuosemi: «Non omo, omo già fui,
e li parenti miei furon lombardi,
mantoani per patrïa ambedui.
Nacqui sub Iulio, ancor che fosse tardi,
e vissi a Roma sotto 'l buono Augusto
nel tempo de li dèi falsi e bugiardi.
Poeta fui, e cantai di quel giusto
figliuol d'Anchise che venne di Troia,
poi che 'l superbo Ilïón fu combusto.
Ma tu perché ritorni a tanta noia?
perché non sali il dilettoso monte
ch'è principio e cagion di tutta gioia?».
«Or se' tu quel Virgilio e quella fonte
che spandi di parlar sì largo fiume?»,
rispuos' io lui con vergognosa fronte.
«O de li altri poeti onore e lume,
vagliami 'l lungo studio e 'l grande amore
che m'ha fatto cercar lo tuo volume.
Tu se' lo mio maestro e 'l mio autore,
tu se' solo colui da cu' io tolsi
lo bello stilo che m'ha fatto onore.
Vedi la bestia per cu' io mi volsi;
aiutami da lei, famoso saggio,
ch'ella mi fa tremar le vene e i polsi».
«A te convien tenere altro vïaggio»,
rispuose, poi che lagrimar mi vide,
«se vuo' campar d'esto loco selvaggio;
ché questa bestia, per la qual tu gride,
non lascia altrui passar per la sua via,
ma tanto lo 'mpedisce che l'uccide;
e ha natura sì malvagia e ria,
che mai non empie la bramosa voglia,
e dopo 'l pasto ha più fame che pria.
Molti son li animali a cui s'ammoglia,
e più saranno ancora, infin che 'l veltro
verrà, che la farà morir con doglia.
Questi non ciberà terra né peltro,
ma sapïenza, amore e virtute,
e sua nazion sarà tra feltro e feltro.
Di quella umile Italia fia salute
per cui morì la vergine Cammilla,
Eurialo e Turno e Niso di ferute.
Questi la caccerà per ogne villa,
fin che l'avrà rimessa ne lo 'nferno,
là onde 'nvidia prima dipartilla.
Ond' io per lo tuo me' penso e discerno
che tu mi segui, e io sarò tua guida,
e trarrotti di qui per loco etterno;
ove udirai le disperate strida,
vedrai li antichi spiriti dolenti,
ch'a la seconda morte ciascun grida;
e vederai color che son contenti
nel foco, perché speran di venire
quando che sia a le beate genti.
A le quai poi se tu vorrai salire,
anima fia a ciò più di me degna:
con lei ti lascerò nel mio partire;
ché quello imperador che là sù regna,
perch' i' fu' ribellante a la sua legge,
non vuol che 'n sua città per me si vegna.
In tutte parti impera e quivi regge;
quivi è la sua città e l'alto seggio:
oh felice colui cu' ivi elegge!».
E io a lui: «Poeta, io ti richeggio
per quello Dio che tu non conoscesti,
a ciò ch'io fugga questo male e peggio,
che tu mi meni là dov' or dicesti,
sì ch'io veggia la porta di san Pietro
e color cui tu fai cotanto mesti».
Allor si mosse, e io li tenni dietro.*
*
*
*
*
And it doesn't end the input...

String output incomplete - Strange behavior

Strangely, the following string stops before the end:
#include <iostream>
#include <string>
using std::wcout;
using std::wstring;
int main()
{
wstring test = L"Os elfos compõem uma raça atlética e esguia, da mesma altura dos humanos. Eles apresentam a mesma variedade de compleições dos humanos, mas costumam ser mais bronzeados ou morenos. A cor típica do cabelo de um elfo é marrom escuro, ruivo escuro, verde musgo ou dourado escuro. As orelhas dos elfos são longas e pontiagudas, seus olhos são azuis, violetas ou verdes vibrantes. Esse povo tem poucos pêlos no corpo, mas prefere manter uma aparência selvagem e embaraçada nos cabelos.\nOs elfos atingem a maturidade na mesma velocidade que os humanos, mas demonstram pouquíssimos efeitos do envelhecimento depois da idade adulta. O primeiro sinal da idade avançada de um elfo geralmente é uma mudança na cor dos cabelos — muitas vezes ficando grisalhos, mas quase sempre escurecendo ou assumindo cores mais castanhas. A maioria dos elfos vive bem até os 200 anos de idade e permanecem vigorosos até o fim.";
wcout << test;
return 0;
}
Output:
Os elfos comp§em uma raþa atlÚtica e esguia, da mesma altura dos humanos. Eles apresentam a mesma variedade de compleiþ§es dos humanos, mas costumam ser mais bronzeados ou morenos. A cor tÝpica do cabelo de um elfo Ú marrom escuro, ruivo escuro, verde musgo ou dourado escuro. As orelhas dos elfos sÒo longas e pontiagudas, seus olhos sÒo azuis, violetas ou verdes vibrantes. Esse povo tem poucos pÛlos no corpo, mas prefere manter uma aparÛncia selvagem e embaraþada nos cabelos.
Os elfos atingem a maturidade na mesma velocidade que os humanos, mas demonstram pouquÝssimos efeitos do envelhecimento depois da idade adulta. O primeiro sinal da idade avanþada de um elfo geralmente Ú uma mudanþa na cor dos cabelos
Correct Ouput:
Os elfos comp§em uma raþa atlÚtica e esguia, da mesma altura dos humanos. Eles apresentam a mesma variedade de compleiþ§es dos humanos, mas costumam ser mais bronzeados ou morenos. A cor tÝpica do cabelo de um elfo Ú marrom escuro, ruivo escuro, verde musgo ou dourado escuro. As orelhas dos elfos sÒo longas e pontiagudas, seus olhos sÒo azuis, violetas ou verdes vibrantes. Esse povo tem poucos pÛlos no corpo, mas prefere manter uma aparÛncia selvagem e embaraþada nos cabelos.
Os elfos atingem a maturidade na mesma velocidade que os humanos, mas demonstram pouquÝssimos efeitos do envelhecimento depois da idade adulta. O primeiro sinal da idade avanþada de um elfo geralmente Ú uma mudanþa na cor dos cabelos — muitas vezes ficando grisalhos, mas quase sempre escurecendo ou assumindo cores mais castanhas. A maioria dos elfos vive bem até os 200 anos de idade e permanecem vigorosos até o fim.
It stops always on the same part "... cabelos".
What is happening?
If I divide the string in smaller chunks, it behaves properly. Is it the issue, string size?
I checked the characters around where it stops printing to see what they were in unicode.
Your hyphen is actually a unicode dash 0x2014.
This outputs a null to the stream and terminates the string.
When faced with a large amount of code, data, features, or changes it's best to put on blinkers and chop it down into into smaller pieces. Sometimes it's best to chop it in half, then half again, then again, until it's manageable. Other times, just strip down to nothing, then add in a little at a time.