User:Ptomusk
From ICO wiki
Info
Erinevate ainete raames lisatud sisu
Skriptimiskeeled (I387)
Tunnis lahendatud näited
Teine
- Teha skript, mis küsib kasutajalt kataloogi nime ja siis väljastab kõik (tavalised) failid/kaustad, mis seal kataloogis asuvad 3p
Ptomusk 14:29, 29 September 2013 (EEST)
#!/bin/bash
_short_help="`basename $0` [DIRECTORY]"
_long_help="Output the files in the specified directory"
if [ "$1" = '--help' ]; then
echo $_short_help
echo $_long_help
exit 0
elif [ -d "$1" ]; then
find "$1/" -maxdepth 1 -type f
else
echo "No such directory!"
echo $_short_help
exit 1
fi
Link originaalpostitusele: Bash_quests_2013#Teine
Quest 30
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Luua isikukoodi parser ja õigsuse kontroll.
#Sisendiks fail kus igal real on isikukood, mis võib olla õige või vale.
#Väljundiks on fail kus on õiged isikukoodid kus kontrollsumma klapib ning kuupäev on korrektne (aastas 12 kuud ning iga kuu päevade arv sobiv).
#
#NB! Kuupäeva õigsuse kontrollimiseks kasutage datetime.strptime funktsiooni ja uuesti vormindamiseks datetime.strftime funktsiooni
#
#Autor: Peeter Tomusk
#Useful sources
#Isikukoodi spetsifikatsiooni (tasuta) kirjeldus - http://et.wikipedia.org/wiki/Isikukood
##Import modules
import sys
import os
from string import rstrip
import time
#from calendar import isleap
##Some initial variables
helpmessage="Usage: %s [input_file_name] [[--debug]]" % sys.argv[0]
helplongmessage="""
Test the validity of Estonian ID-codes in a file and print properly formatted lines with the birth-date and gender on screen
"""
debug=False
input_file=""
seed={1:(1,2,3,4,5,6,7,8,9,1),2:(3,4,5,6,7,8,9,1,2,3)}
##Parse arguments
#Check that we have arguments
if len(sys.argv)==1:
sys.stderr.write("Invalid number of arguments!\n\n%s\n" % helpmessage)
sys.exit(4)
#Loop trough all arguments except the first one (scripts own name)
while len(sys.argv[1:])>0:
#If the argument is help
if sys.argv[1]=="--help":
print helpmessage+helplongmessage
sys.exit(0)
#If the argument is debug
if sys.argv[1]=="--debug":
debug=True
del sys.argv[1]
#In other cases presume it's a filename
else:
#Test if we already have a filename
if len(input_file)>0:
sys.stderr.write("Input file \"%s\" is already specified and filename \"%s\" is one too many\ncurrently only one file is supported, sorry!\n" % (input_file,sys.argv[1]))
sys.exit(2)
#Test if the file exists
elif os.path.isfile(sys.argv[1]):
input_file=sys.argv[1]
del sys.argv[1]
#If the doesn't exists
else:
sys.stderr.write("Input file \"%s\" doesn't exist!\n" % sys.argv[1])
sys.exit(1)
##Do some actual work
#Test if we can read the file
if os.access(input_file,os.R_OK):
#and read it's contents to a list
f=open(input_file,"r")
input_data=f.readlines()
f.close
#Or give an error
else:
sys.stderr.write("Cannot read file \"%s\"\n" % input_file)
sys.exit(3)
#For each line in the file
for code in input_data:
code=rstrip(code,"\n")
#Find the gender
if int(code[0])%2==0:
gender="naine"
elif int(code[0])%2==1:
gender="mees"
#Find the appropriate number of hundreds for the birthyear
cents=18+(((int(code[0])%2)+int(code[0]))/3)
#Check if the date is a proper value
try:
birthdate=time.strftime("%Y.%m.%d",time.strptime("%s%s.%s.%s" % (cents,code[1:3],code[3:5],code[5:7]),"%Y.%m.%d"))
except ValueError as error:
if debug:
print "%s is wrong, because %s" % (code,error)
continue
#Verify the code against it's checksum
for seed_type in 1,2:
#Initialise a variable for the seed multiplication sums
codesum=0
#For each non-checksum element in the code
for index in range(10):
#Multiply it with the current seed and add the result
codesum=codesum+(seed[seed_type][index]*int(code[index]))
#Calculate the checksum
checksum=codesum%11
#If checksum is 10
if checksum==10:
if seed_type==1:
continue
elif seed_type==2:
checksum=0
#If the checksum is not 10 and matches the original
if checksum!=10 and checksum==int(code[-1]):
print "%s - %s - %s" % (code,birthdate,gender)
break
else:
if debug:
print "%s is wrong, because the checksum is wrong" % code