Informática, perguntado por lucas27484, 7 meses atrás

PYTHON

Simple | Grep

O comando (programa) grep é uma das ferramentas mais úteis e versáteis disponível no Unix. Ele procura por padrões especificados pelo usuário dentro de arquivos de texto. Em outras palavras, você pode pesquisar por palavras ou padrões e a linha ou linhas que possuem o conteúdo procurado serão exibidas.

Neste exercício, sua tarefa consiste em construir um programa para encontrar ocorrências de uma cadeia de caracteres em um arquivo, no estilo do programa grep.

Entrada:

A entrada para seu programa é uma palavra p, um inteiro c e o nome n do arquivo.


Saída:

A saída do programa deverá ocorrer da seguinte forma: Se p aparece no arquivo, seu programa deve imprimir o nome do arquivo seguido do número da linha em que p aparece. Em seguida, c linhas anteriores a linha que contém p, a linha p e as c linhas posteriores a linha p. Entre uma ocorrência e outra, deve-se imprimir uma linha em branco, e se p não aparece em um certo arquivo, seu programa não deve imprimir nada.

Notas:

Cada linha dos arquivos de texto não tem mais do que 512 caracteres e a palavra e o arquivo não possuem mais do que 30 caracteres.

Teste no anexo

Anexos:

Soluções para a tarefa

Respondido por GeBEfte
1

Antes de passarmos ao programa, para evitar dúvidas, vale ressaltar que a numeração das linhas começa em 1 e, também, que o arquivo de texto deve estar alocado na mesma pasta deste script ou será necessário informar o caminho para este arquivo.

Agora sim, vamos ao código e, posteriormente, comentou um pouco mais sobre o que foi feito.

[Python 3.8]

\sf parametros~=~inpu t().split()\\p~=~parametros[0]\\c~=~int(parametros[1])\\n~=~parametros[2]\\

\sf with~ope n(n,~'r')~as~f:\\~~~~conteudo~=~f.readlines()\\~~~~for~pos\underline{~}linha,~linha~in~enumerate(conteudo):\\~~~~~~~~if~p~in~linha:\\~~~~~~~~~~~~print(f'\{n\}:~\{pos_linha+1\}')\\~~~~~~~~~~~~for~i~in~range(pos\underline{~}linha~-~c,~c~+~pos\udnerline{~}linha~+~1):\\~~~~~~~~~~~~~~~~if~i~>=~0~and~i~<~len(conteudo):\\~~~~~~~~~~~~~~~~~~~~print(conteudo[i].rstrip('\backslash n'))\\~~~~~~~~~~~~print()\\

Comentários:

--> O código começa lendo os parâmetros necessários que serão informados pelo usuário como uma string e dividindo-os em três variáveis separadas: "p", "c" e "n"

--> Abrimos o arquivo "n" no modo de leitura ('r') com uma estrutura with e, utilizando o método readlines(), "transformamos" o conteúdo do arquivo em uma lista em que cada elemento é representado por uma linha do texto.

--> Um laço for é usado para percorrermos as linha do texto guardadas na lista "conteudo" e, em cada uma dessas iterações, verificamos se a string "p" está contida na linha.

--> Quando a string "p" estiver presente na linha, devemos mostrar ao usuário uma ou uma série de linhas do texto "n". Para isso, utilizamos outro for com o numero de iterações determinado por uma função range(). Perceba também que é utilizado um condicional if para verificar se a linha de número "i" existe no documento.

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Perguntas interessantes