Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как в txt файле оставить только 2 строчки после определенного слова выше? (https://javascript.ru/forum/events/83456-kak-v-txt-fajjle-ostavit-tolko-2-strochki-posle-opredelennogo-slova-vyshe.html)

mik888em 13.12.2021 01:41

Как в txt файле оставить только 2 строчки после определенного слова выше?
 
Есть txt файл , вот его содержимое:
===============
f fgyuf
с Scryptics
s Nartelis19
rhvrihvieg445gv54vuv
===============
gk qwerty gfhfg
с h5vvh5vh5vh5
s bj65v54gc4g
gdfgdsggrsgdg433
===============
dgf ffrffef
c c4ccf4cf4cf4fc4
s Ugniukas1
v4gv4v5g4g4vg5v4
===============
gk qwerty kfefdf
c vg545v4gv45gv5g4v5g4
s jb6jb6jb6j
g4g4vv4gv4gvg4
===============
gtth vdvfv gtggg
c vg4vg45v45gvg4545vgv45g
s v454vgv545v4gvg45
v4gg4vvg4g4vvg4vg45vg45vg4545vg
===============
fvdver 443342
c cffx2sx2xs2xs2
s xe332xd23f4v5gh5b6
445vgv45gv45gv45gv45g45vg
===============


Вопрос:
Как джаваскриптом оставить только 2 строчки которые идут после строчки, в которой есть "фраза": gk qwerty ?

См скрин:
https://prnt.sc/22rtp3f

И эти две строчки поставить через двоеточие?

Должно остаться в txt файле вот так:
с h5vvh5vh5vh5:s bj65v54gc4g
c vg545v4gv45gv5g4v5g4:s jb6jb6jb6j

voraa 13.12.2021 06:59

const txt = 
`===============
f fgyuf
с Scryptics
s Nartelis19
rhvrihvieg445gv54vuv
===============
gk qwerty gfhfg
с h5vvh5vh5vh5
s bj65v54gc4g
gdfgdsggrsgdg433
===============
dgf ffrffef
c c4ccf4cf4cf4fc4
s Ugniukas1
v4gv4v5g4g4vg5v4
===============
gk qwerty kfefdf
c vg545v4gv45gv5g4v5g4
s jb6jb6jb6j
g4g4vv4gv4gvg4
===============
gtth vdvfv gtggg
c vg4vg45v45gvg4545vgv45g
s v454vgv545v4gvg45
v4gg4vvg4g4vvg4vg45vg45vg4545vg
===============
fvdver 443342
c cffx2sx2xs2xs2
s xe332xd23f4v5gh5b6
445vgv45gv45gv45gv45g45vg
===============`;

const outar = [];
const txtar = txt.split('\n');
for (let i = 0; i < txtar.length-2; ) {
	if (txtar[i++].includes('gk qwerty'))
		outar.push(txtar[i++]+':'+txtar[i++]);	
}
const txtout = outar.join('\n');
alert(txtout);


ЗЫ Не было сказано, что делать в случаях, если 'gk qwerty' встречается в двух строках подряд или через строку или встречается в предпоследней строке

рони 13.12.2021 07:14

mik888em,
<pre>

<script>
let str = `===============
f fgyuf
с Scryptics
s Nartelis19
rhvrihvieg445gv54vuv
===============
gk qwerty gfhfg
с h5vvh5vh5vh5
s bj65v54gc4g
gdfgdsggrsgdg433
===============
dgf ffrffef
c c4ccf4cf4cf4fc4
s Ugniukas1
v4gv4v5g4g4vg5v4
===============
gk qwerty kfefdf
c vg545v4gv45gv5g4v5g4
s jb6jb6jb6j
g4g4vv4gv4gvg4
===============
gtth vdvfv gtggg
c vg4vg45v45gvg4545vgv45g
s v454vgv545v4gvg45
v4gg4vvg4g4vvg4vg45vg45vg4545vg
===============
fvdver 443342
c cffx2sx2xs2xs2
s xe332xd23f4v5gh5b6
445vgv45gv45gv45gv45g45vg
===============
`;
let save = 0, txt = 'gk qwerty'
str = str.split(/\n/).filter(a => {
if(save-- > 0) return true;
save = a.includes(txt) ?  2 : 0
});
document.write(str.join('\n'))

</script>
</pre>

ksa 13.12.2021 12:03

Добавлю свои 5коп... :D
<script>
const str = `===============
f fgyuf
с Scryptics
s Nartelis19
rhvrihvieg445gv54vuv
===============
gk qwerty gfhfg
с h5vvh5vh5vh5
s bj65v54gc4g
gdfgdsggrsgdg433
===============
dgf ffrffef
c c4ccf4cf4cf4fc4
s Ugniukas1
v4gv4v5g4g4vg5v4
===============
gk qwerty kfefdf
c vg545v4gv45gv5g4v5g4
s jb6jb6jb6j
g4g4vv4gv4gvg4
===============
gtth vdvfv gtggg
c vg4vg45v45gvg4545vgv45g
s v454vgv545v4gvg45
v4gg4vvg4g4vvg4vg45vg45vg4545vg
===============
fvdver 443342
c cffx2sx2xs2xs2
s xe332xd23f4v5gh5b6
445vgv45gv45gv45gv45g45vg
===============
`;
const txt = 'gk qwerty'
let i = 0
do {
	i = str.indexOf(txt, i)
	if (i !== -1) {
		i = str.indexOf('\n', i)
		let k = i
		for (let j = 0; j < 2 ; j++) k = str.indexOf('\n', k + 1)
		const val = str.substring(i + 1, k).replace('\n', ': ')
		document.write('<p>' + val + '</p>')
		i = k
	}
} while (i !== -1)
</script>


Часовой пояс GMT +3, время: 02:55.