Ejercicio 8

This commit is contained in:
perro tuerto 2023-02-22 13:06:35 -08:00
parent 8bdf5a21d2
commit e6c18957e6
1 changed files with 49 additions and 0 deletions

49
exercises/ex08/ex08.py Normal file
View File

@ -0,0 +1,49 @@
# Exercise 2
# 1. cut command
import re
import sys
import itertools
import argparse
def convert(field):
field = list(map(lambda f: int(f), field.split("-")))
if len(field) == 1:
return field
else:
for i in range(field[0], field[-1]):
field.append(i)
return sorted(set(field))
def parse(fields):
try:
fields = list(map(convert, fields.split(",")))
fields = list(itertools.chain(*fields))
if 0 in fields:
print("cut: fields are numbered from 1")
sys.exit(1)
return list(map(lambda n: n - 1, fields))
except Exception:
print(f"cut: valor de campo inválido: «{fields}»")
sys.exit(1)
parser = argparse.ArgumentParser()
parser.add_argument('stream', default=sys.stdin, nargs="?")
parser.add_argument('-d', '--delimiter', default=False, type=str)
parser.add_argument('-f', '--fields', type=str, required=True)
args = parser.parse_args()
for line in args.stream:
line = line.strip()
if args.delimiter is False:
print(line)
else:
fields = re.compile(f"{args.delimiter}+").split(line)
res = []
for col in parse(args.fields):
if col < len(fields):
res.append(fields[col])
print(" ".join(res))