Search in paragraph's text: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H
(julia example)
m (→‎{{header|Wren}}: Changed to Wren S/H)
 
(16 intermediate revisions by 11 users not shown)
Line 1:
{{draft task}}
 
The goal is to verify the presence of a word or regular expression within several paragraphs of text (structured or not) and to printformat the output of the relevant paragraphs before putting them on the standard output.
 
So here, let’s imagine that we are trying to verify the presence of a keyword "SystemError" within what I want to call "the paragraphs" "Traceback (most recent call last):" in the file Traceback.txt
 
<pre>
Line 78:
</pre>
 
The expected result must be (formated with ---------------- for paragraphs matchedparagraph's sepseparator AND "Traceback (most recent call last):" as the beginning of each relevant's paragraph :
 
<pre>
Line 113:
----------------
</pre>
 
=={{header|11l}}==
{{trans|Python}}
<syntaxhighlight lang="11l">
V f = File(‘Traceback.txt’)
V rawText = f.read()
 
V paragraphs = rawText.split("\n\n")
 
L(p) paragraphs
I ‘SystemError’ C p
 
V index = p.findi(‘Traceback (most recent call last):’)
 
I -1 != index
print(p[index ..])
print(‘----------------’)
</syntaxhighlight>
 
=={{header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">FileRead, fileContents, Traceback.txt
keyWord := "SystemError" ; or regex like "SystemE\w+"
beginWith := "Traceback (most recent call last):"
for i, paragraph in StrSplit(StrReplace(fileContents, "`r"), "`n`n")
result .= RegExMatch(paragraph, keyWord) ? SubStr(paragraph, InStr(paragraph, beginWith, 1)) "`n----------------`n" : ""
MsgBox % result</syntaxhighlight>
{{out}}
<pre>Traceback (most recent call last):
vmodl.fault.SystemError: (vmodl.fault.SystemError) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = 'A general system error occurred: Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.',
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [],
reason = 'Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.'
}
----------------
Traceback (most recent call last):
[Tue Jan 21 16:16:19.252221 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] SystemError: unable to access /home/dir
[Tue Jan 21 16:16:19.249067 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] mod_wsgi (pid=6515): Failed to exec Python script file '/home/pi/RaspBerryPiAdhan/www/sysinfo.wsgi'.
[Tue Jan 21 16:16:19.249609 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] mod_wsgi (pid=6515): Exception occurred processing WSGI script '/home/pi/RaspBerryPiAdhan/www/sysinfo.wsgi'.
----------------
Traceback (most recent call last): 11/01 18:24:57.728 ERROR| traceback:0013| File "/tmp/sysinfo/autoserv-0tMj3m/common_lib/log.py", line 70, in decorated_func 11/01 18:24:57.729 ERROR| traceback:0013| fn(*args, **dargs) 11/01 18:24:57.730 ERROR| traceback:0013| File "/tmp/sysinfo/autoserv-0tMj3m/bin/base_sysinfo.py", line 286, in log_after_each_test 11/01 18:24:57.731 ERROR| traceback:0013| old_packages = set(self._installed_packages) 11/01 18:24:57.731 ERROR| traceback:0013| SystemError: no such file or directory
----------------
Traceback (most recent call last):
File "/usr/lib/vmware-vpx/vsan-health/pyMoVsan/VsanClusterPrototypeImpl.py", line 1492, in WaitForUpdateTask
WaitForTask(task)
File "/usr/lib/vmware-vpx/pyJack/pyVim/task.py", line 123, in WaitForTask
raise task.info.error
vmodl.fault.SystemError: (vmodl.fault.SystemError) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = 'A general system error occurred: Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.',
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [],
reason = 'Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.'
}
----------------</pre>
 
=={{header|AWK}}==
Using the awk "Record Separator" :
<langsyntaxhighlight lang="awk">
awk -v ORS='\n\n'BEGIN { RS = "" ; ORS = "\n----------------\n" } /Traceback/ && '/SystemError/ { print RS substr($0,index($0,"Traceback")) }' RS="Traceback" Traceback.txt |\
</syntaxhighlight>
awk -v ORS='\n----------------\n' '/Traceback/' RS="\n\n"
Note : RS is modified from "\n" to "" in order to use Traceback information in index function.
</lang>
Note : 1st awk is used to search for an expression (regular or not) within paragraphs, and 2nd awk is used for formatting
 
ORS is modified to seperate the paragraphs with "\n----------------\n"
=={{header|J}}==
 
Each paragraph must contains "Traceback" and "SystemError"
 
substr is extracting only characters after "Traceback" appearance, until the next matching "Traceback" and "SystemError".
 
=={{header|C}}==
<syntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define INPUT_FILE_NAME "Traceback.txt"
#define KEYWORD_STRING "SystemError"
#define TRACEBACK_STRING "Traceback (most recent call last):"
#define END_OF_PARAGRAPH "\n----------------\n"
 
char *load_paragraph( FILE *f );
 
int main() {
FILE *f = fopen( INPUT_FILE_NAME, "r" );
 
if( f ) {
char *par = NULL;
 
while( (par=load_paragraph(f)) ) {
if( strstr(par,KEYWORD_STRING) ) {
char *p = strstr( par, TRACEBACK_STRING );
 
if( p ) printf( p );
else printf( "%s\n%s", TRACEBACK_STRING, par );
 
printf( END_OF_PARAGRAPH );
}
 
free( par ); par = NULL;
}
 
if( !feof(f) )
puts( "End of file not reached." );
 
fclose( f ); f = NULL;
}
else {
puts( "Input file not opened." );
}
 
return 0;
}
 
/*===========================================================================
Starting from the current position, looks for the first occurrence of "\n\n"
in the file f, counting the number of characters from the current position
to "\n\n" itself (not included) or to the end of the file (whichever occurs
first). Resets the file to its original position, then returns the number of
characters.
If the funtions fails, it returns ((size_t)-1).
===========================================================================*/
 
size_t get_paragraph_length( FILE *f ) {
size_t l = ((size_t)-1);
 
if( f && !feof(f) ) {
fpos_t ex_pos;
 
if( 0==fgetpos(f,&ex_pos) ) {
int c;
 
for( c=fgetc(f); c!=EOF; c=fgetc(f) ) {
if( '\n'==c ) {
if( '\n'!=(c=fgetc(f)) ) {
ungetc( c, f );
}
else {
++l;
break;
}
}
 
++l;
}
 
l += EOF==c;
 
fsetpos( f, &ex_pos );
}
}
 
return l;
}
 
/*===========================================================================
Loads a paragraph from the file f. Paragraphs are detected looking for the
occurrences of "\n\n" separators. The loaded paragraph is put into a chunk of
memory allocated with malloc(). The pointer to that memory is returned.
If the function fails, no memory is allocated and NULL is returned.
===========================================================================*/
 
char *load_paragraph( FILE *f ) {
char *par = NULL;
 
if( !feof(f) ) {
size_t i, l = get_paragraph_length( f );
 
if( ((size_t)-1)!=l ) {
par = malloc( l+1 );
 
if( par ) {
for( i=0; i<l; ++i )
par[i] = fgetc( f );
par[i] = '\0';
 
/* just jump beyond the paragraph delimiter */
fgetc( f ); fgetc( f );
}
}
}
 
return par;
}
</syntaxhighlight>
{{ out }}
<pre>
Output as required by task.
</pre>
 
=={{header|C++}}==
<syntaxhighlight lang="c++">
#include <algorithm>
#include <cstdint>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
 
const std::string PARAGRAPH_SEPARATOR = "\n\n";
 
int main() {
std::ifstream file;
file.open("../Traceback.txt");
std::stringstream stream;
stream << file.rdbuf();
std::string file_contents = stream.str();
 
std::vector<std::string> paragraphs;
uint64_t start;
uint64_t end = 0;
while ( ( start = file_contents.find_first_not_of(PARAGRAPH_SEPARATOR, end) ) != std::string::npos ) {
end = file_contents.find(PARAGRAPH_SEPARATOR, start);
paragraphs.emplace_back(file_contents.substr(start, end - start));
}
 
for ( const std::string& paragraph : paragraphs ) {
if ( paragraph.find("SystemError") != std::string::npos ) {
int32_t index = paragraph.find("Traceback (most recent call last):");
if ( index >= 0 ) {
std::cout << paragraph.substr(index) << std::endl;
std::cout << "----------------" << std::endl;
}
}
}
}
</syntaxhighlight>
{{ out }}
<pre>
Output as required by task.
</pre>
 
=={{header|J}}==
Implementation:
 
<langsyntaxhighlight Jlang="j">NB. read file, separate on blank lines
paragraphs=: ((LF,LF)&E. <;.2 ])fread 'traceback.txt'
 
Line 136 ⟶ 361:
 
NB. add "paragraph 'separator'" and display
echo ;searched ,L:0 '----------------',LF</langsyntaxhighlight>
 
{{out}}
Line 171 ⟶ 396:
----------------
</pre>
 
=={{header|Java}}==
<syntaxhighlight lang="java">
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
 
public final class SearchInParagraphsText {
 
public static void main(String[] args) throws IOException {
Path filePath = Path.of("./Traceback.txt");
String fileContents = Files.readString(filePath, StandardCharsets.UTF_8);
String[] paragraphs = fileContents.split(PARAGRAPH_SEPARATOR);
for ( String paragraph : paragraphs ) {
if ( paragraph.contains("SystemError") ) {
int index = paragraph.indexOf("Traceback (most recent call last):");
if ( index >= 0 ) {
System.out.println(paragraph.substring(index));
System.out.println("----------------");
}
}
}
}
private static final String PARAGRAPH_SEPARATOR = "\r\n\r\n";
 
}
</syntaxhighlight>
{{ out }}
<pre>
Output as requested by task
</pre>
 
=={{header|jq}}==
{{works with|jq}}
'''Works with gojq, the Go implementation of jq'''
 
<syntaxhighlight lang="jq">def p1: "Traceback (most recent call last):";
def p2: "SystemError";
def sep: "----------------";
split("\n\n")[]
| index(p1) as $ix
| select( $ix and index(p2) )
| .[$ix:], sep</syntaxhighlight>
'''Invocation''':
jq -rRs -f program.jq Traceback.txt
{{out}}
As required.
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">const filename = "traceback.txt"
const pmarker, target = "Traceback (most recent call last):", "SystemError"
 
Line 184 ⟶ 459:
],
)
</syntaxhighlight>
</lang>
 
=={{header|Nim}}==
{{trans|Python}}
<syntaxhighlight lang="Nim">import std/strutils
 
let rawText = readFile("Traceback.txt")
 
for paragraph in rawText.split("\n\n"):
if "SystemError" in paragraph:
let index = paragraph.find("Traceback (most recent call last):")
if index != -1:
echo paragraph[index..^1]
echo "----------------"
</syntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #000080;font-style:italic;">--constant text = get_text("Traceback.txt") -- (not js!)</span>
Line 206 ⟶ 495:
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</langsyntaxhighlight>-->
Output as requested
 
=={{header|Phixmonti}}==
<syntaxhighlight lang="Phixmonti">include ..\Utilitys.pmt
 
"Traceback (most recent call last):" >ps
""
 
"Traceback.txt" "r" fopen >ps
 
tps 0 > while
tps fgets
number? if drop false else chain true endif
endwhile
 
ps> fclose
 
"\n\n" xplit
 
len for
get
"SystemError" find
if
tps find dup
if
snip ? "----------------" ? drop
else
drop tps ? ? "----------------" ?
endif
else
drop
endif
endfor
cps</syntaxhighlight>
{{out}}
<pre>Traceback (most recent call last):
vmodl.fault.SystemError: (vmodl.fault.SystemError) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = 'A general system error occurred: Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.',
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [],
reason = 'Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.'
}
----------------
Traceback (most recent call last):
[Tue Jan 21 16:16:19.252221 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] SystemError: unable to access /home/dir
[Tue Jan 21 16:16:19.249067 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] mod_wsgi (pid=6515): Failed to exec Python script file '/home/pi/RaspBerryPiAdhan/www/sysinfo.wsgi'.
[Tue Jan 21 16:16:19.249609 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] mod_wsgi (pid=6515): Exception occurred processing WSGI script '/home/pi/RaspBerryPiAdhan/www/sysinfo.wsgi'.
----------------
Traceback (most recent call last): 11/01 18:24:57.728 ERROR| traceback:0013| File "/tmp/sysinfo/autoserv-0tMj3m/common_lib/log.py", line 70, in decorated_func 11/01 18:24:57.729 ERROR| traceback:0013| fn(*args, **dargs) 11/01 18:24:57.730 ERROR| traceback:0013| File "/tmp/sysinfo/autoserv-0tMj3m/bin/base_sysinfo.py", line 286, in log_after_each_test 11/01 18:24:57.731 ERROR| traceback:0013| old_packages = set(self._installed_packages) 11/01 18:24:57.731 ERROR| traceback:0013| SystemError: no such file or directory
----------------
Traceback (most recent call last):
File "/usr/lib/vmware-vpx/vsan-health/pyMoVsan/VsanClusterPrototypeImpl.py", line 1492, in WaitForUpdateTask
WaitForTask(task)
File "/usr/lib/vmware-vpx/pyJack/pyVim/task.py", line 123, in WaitForTask
raise task.info.error
vmodl.fault.SystemError: (vmodl.fault.SystemError) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = 'A general system error occurred: Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.',
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [],
reason = 'Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.'
}
----------------
 
=== Press any key to exit ===</pre>
 
=={{header|Python}}==
<syntaxhighlight lang="python">
with open('Traceback.txt', 'r' ) as f:
rawText = f.read()
 
paragraphs = rawText.split( "\n\n" )
 
for p in paragraphs:
if "SystemError" in p:
 
index = p.find( "Traceback (most recent call last):" )
 
if -1 != index:
print( p[index:] )
print( "----------------" )
</syntaxhighlight>
 
Output as requested.
 
=={{header|Raku}}==
Generalized. Pipe in the file from the shell, user definable search term and entry point.
Just use the same technique as already thoroughly explored in tasks [[Retrieve_and_search_chat_history#Raku|Retrieve and search chat history]] and [[XXXX_redacted#Raku|XXXX redacted]] among many others.
<syntaxhighlight lang="raku" line>unit sub MAIN ( :$for, :$at = 0 );
<lang perl6>.say if $paragraph.contains: 'whatever';</lang>
 
put slurp.split( /\n\n+/ ).grep( { .contains: $for } )
.map( { .substr: .index: $at } )
.join: "\n----------------\n"</syntaxhighlight>
{{out|Example output using command line}}
 
raku search.raku --for='SystemError' --at='Traceback' < traceback.txt
 
''Matches expected except for not having a extraneous trailing paragraph separator.''
 
<pre style="height:30ex;overflow:scroll;">Traceback (most recent call last):
vmodl.fault.SystemError: (vmodl.fault.SystemError) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = 'A general system error occurred: Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.',
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [],
reason = 'Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.'
}
----------------
Traceback (most recent call last):
[Tue Jan 21 16:16:19.252221 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] SystemError: unable to access /home/dir
[Tue Jan 21 16:16:19.249067 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] mod_wsgi (pid=6515): Failed to exec Python script file '/home/pi/RaspBerryPiAdhan/www/sysinfo.wsgi'.
[Tue Jan 21 16:16:19.249609 2020] [wsgi:error] [pid 6515:tid 3041002528] [remote 10.0.0.12:50757] mod_wsgi (pid=6515): Exception occurred processing WSGI script '/home/pi/RaspBerryPiAdhan/www/sysinfo.wsgi'.
----------------
Traceback (most recent call last): 11/01 18:24:57.728 ERROR| traceback:0013| File "/tmp/sysinfo/autoserv-0tMj3m/common_lib/log.py", line 70, in decorated_func 11/01 18:24:57.729 ERROR| traceback:0013| fn(*args, **dargs) 11/01 18:24:57.730 ERROR| traceback:0013| File "/tmp/sysinfo/autoserv-0tMj3m/bin/base_sysinfo.py", line 286, in log_after_each_test 11/01 18:24:57.731 ERROR| traceback:0013| old_packages = set(self._installed_packages) 11/01 18:24:57.731 ERROR| traceback:0013| SystemError: no such file or directory
----------------
Traceback (most recent call last):
File "/usr/lib/vmware-vpx/vsan-health/pyMoVsan/VsanClusterPrototypeImpl.py", line 1492, in WaitForUpdateTask
WaitForTask(task)
File "/usr/lib/vmware-vpx/pyJack/pyVim/task.py", line 123, in WaitForTask
raise task.info.error
vmodl.fault.SystemError: (vmodl.fault.SystemError) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = 'A general system error occurred: Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.',
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [],
reason = 'Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.: Sysinfo error: Bad parameterSee VMkernel log for details.'
}</pre>
 
=={{header|sed}}==
<syntaxhighlight lang="sed">/./{
H
$!d
}
x
:l
/^Traceback (most recent call last):/!s/^.[^T]*//
t l
/SystemError/!d
a\
----------------</syntaxhighlight>
Output as requested by task.
 
=={{header|Wren}}==
{{libheader|Wren-pattern}}
<langsyntaxhighlight ecmascriptlang="wren">import "io" for File
import "./pattern" for Pattern
 
Line 230 ⟶ 659:
System.print(para[ix..-1])
System.print(sep)
}</langsyntaxhighlight>
 
{{out}}
9,476

edits