User:Ulaaneot

From ICO wiki
Jump to navigationJump to search

Quest 26

Kirjutada skript, mis otsib üles kõik .html failid ning kirjutab iga faili html dokumendi pealkirja failid.html faili. Loodud html fail (failid.html) peab sisaldama .html faile linkidena, ehk sinna klikates suunab asukohta, kus fail asub.


Lahendus 1 (arvestamiseks)

Versioon 1.0

Bash Quest oli koostatud vigaselt, sest .html faili esimesel real on tavaliselt <html> blokk.

Siiski on Questi esialgne lahendus kontrollitud ja töötab:

#!/bin/bash
# Autor: Urmo Laaneots
# Versioon: 1.0
# Skript otsib üles kõik .html failid ja kirjutab faili esimese rea ja aadressi faili failid.html.
# Määrame failinime, kuhu lõpptulemus kirjutatakse
FILENAME=failid.html
# Loome html faili alguse vastavalt W3 standarditele ja kirjutame selle faili
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
<head>
<title>.html failid</title>
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" /> 
</head>
<body>" > $FILENAME
# `Otsime kõik .html failid süsteemist ja paneme need massiivi
files=( `find / -type f -name "*.html"` ) 
# Tsükkel, mis käib kõik massiivi liikmed läbi
for (( c=1; c<${#files[@]}; c++ )); do
	# Loeme failide esimese rea ja paneme selle muutujasse
	FIRSTLINE=`head -n 1 ${files[$c]}`
	# Kirjutame faili esimese rea .html faili
	echo "Faili esimene rida: <textarea>$FIRSTLINE</textarea><br />" >> $FILENAME
	# Kirjutame faili aadressi .html faili
	echo "Faili asukoht: <a href="${files[$c]}" target="_new">${files[$c]}</a><br />" >> $FILENAME
done
# Lõpetame .html faili
echo "</body>
</html>" >> $FILENAME
# Teavitame kasutajat scripti töö lõpetamisest
echo "Done!"


Bash Questi õige lahendus

Questi lahendus, mis vastab Margus Ernitsa poolt parandatud questile.

Script kirjutab <title></title> blokkide vahele jääva info .html faili.


#!/bin/bash
# Autor: Urmo Laaneots
# Versioon: 2.0
# Quest 26
# Skript otsib süsteemist üles kõik .html failid ja kirjutab faili pealkirja (<title></title>) ja aadressi faili failid.html.
echo "Skript otsib süsteemist üles kõik .html failid ja kirjutab faili pealkirja (<title></title>) ja aadressi faili failid.html"
# Määrame failinime, kuhu lõpptulemus kirjutatakse
FILENAME=failid.html
# Loome html faili alguse vastavalt W3 standarditele ja kirjutame selle faili
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
<head>
<title>.html failid</title>
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" /> 
</head>
<body>" > $FILENAME
# `Otsime kõik .html failid süsteemist ja paneme need massiivi
files=( `find / -type f -name "*.html"` ) 
# Tsükkel, mis käib kõik massiivi liikmed läbi
for (( c=1; c<${#files[@]}; c++ )); do
	# Loeme failide <title> bloki ja valime seal ainult pealkirja ning paneme selle muutujasse
	TITLE=`grep -i "<title>" ${files[$c]} | cut -f 2 -d ">" | cut -f 1 -d "<"`
	# Kirjutame faili pealkirja .html faili
	echo "<i>Faili pealkiri:</i> <b>$TITLE</b><br />" >> $FILENAME
	# Kirjutame faili aadressi .html faili
	echo "<i>Faili asukoht:</i> <a href="${files[$c]}" target="_new">${files[$c]}</a><br />" >> $FILENAME
done
# Lõpetame .html faili
echo "</body>
</html>" >> $FILENAME
# Teavitame kasutajat scripti töö lõpetamisest
echo "Done!"

Powershelli script

Parandasin Meelis Tamme scripti. Nüüd peaks script töötama ka Windows 7'ga. Ning veel: taustapildile kirjutatakse kõik aruviti ip aadressid.

Powershelli Lahendus

#Koostaja: Urmo Laaneots, A21, ulaaneot@itcollege.ee
#Versioon: 2
#Ajalugu: Versioon 1 on tehtud Meelis Tamme poolt!
#Skript loob taustapildi, millele on kirjutatud arvuti nimi, kasutaja, kes on sisse logitud ja aruvti IP aadress
 
#faili asukoht, kuhu loodav pilt salvestatakse
$filename =  $ENV:USERPROFILE + "\taust.png" 

#Funktsioon, mis määrab sisselogitud kasutaja desktopi registrivõtmes taustapildi asukohaks skripti loodud pildi
Function Set-WallPaper1
{
#requires -version 2.0
## Set-Wallpaper - set your windows desktop wallpaper
###################################################################################################
## Usage:
##    Set-Wallpaper "C:\Users\Joel\Pictures\Wallpaper\Dual Monitor\mandolux-tiger.jpg" "Tile"
##    ls *.jpg | get-random | Set-Wallpaper
##    ls *.jpg | get-random | Set-Wallpaper -Style "Stretch"
###################################################################################################
## History:
##    v0.5  First release (on #PowerShell@irc.freenode.net)
##    v1.0  Public release (http://www.poshcode.org/488)
##          - Added Style: Tile|Center|Stretch
##    v1.1  (http://poshcode.org/491)
##          - Added "NoChange" style to just use the style setting already set
##          - Made the Style parameter to the cmdlet optional
##    v2.0  This Release
##          - Updated for CTP3, and made it run as a script instead of a function.
###################################################################################################
[CmdletBinding()]
Param(
   [Parameter(Position=0, Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
   [Alias("FullName")]
   [string]
   $Path
,
   [Parameter(Position=1, Mandatory=$false)]
   $Style = "NoChange"
)

BEGIN {
try {
   $WP = [Wallpaper.Setter]
} catch {
   $WP = add-type @"
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Wallpaper
{
   public enum Style : int
   {
       Tile, Center, Stretch, NoChange
   }

   public class Setter {
      public const int SetDesktopWallpaper = 20;
      public const int UpdateIniFile = 0x01;
      public const int SendWinIniChange = 0x02;

      [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
      private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);
      
      public static void SetWallpaper ( string path, Wallpaper.Style style ) {
         SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
         
         RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
         switch( style )
         {
            case Style.Stretch :
               key.SetValue(@"WallpaperStyle", "2") ; 
               key.SetValue(@"TileWallpaper", "0") ;
               break;
            case Style.Center :
               key.SetValue(@"WallpaperStyle", "1") ; 
               key.SetValue(@"TileWallpaper", "0") ; 
               break;
            case Style.Tile :
               key.SetValue(@"WallpaperStyle", "1") ; 
               key.SetValue(@"TileWallpaper", "1") ;
               break;
            case Style.NoChange :
               break;
         }
         key.Close();
      }
   }
}
"@ -Passthru
}
}
PROCESS {
   Write-Verbose "Setting Wallpaper ($Style) to $(Convert-Path $Path)"
   $WP::SetWallpaper( (Convert-Path $Path), $Style )
}

}

#Funktsioon, mis määrab sisselogitud kasutaja desktopi registrivõtmes taustapildi asukohaks skripti loodud pildi
Function Set-WallPaper-older($Value)
{
 Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value "$value"
 rundll32.exe user32.dll, UpdatePerUserSystemParameters
}

#Funktsioon, mis väljastab kõik arvuti ip aadressid
Function Get-IPAddresses
{ 
$Computer = "." 
$IPconfigset = Get-WmiObject Win32_NetworkAdapterConfiguration 

$count = 0
foreach ($IPConfig in $IPConfigSet) { 
   if ($Ipconfig.IPaddress) { 
      foreach ($addr in $Ipconfig.Ipaddress) { 
      "IP Address: {0}" -f  $addr; 
      $count++  
      } 
   } 
} 
if ($count -eq 0) {"No IP addresses found"} 
}

# Arvuti nimi
$PC=Get-Content Env:\COMPUTERNAME
 
# Kasutajanimi
$USER=Get-Content Env:\USERNAME
 
# IP Aadress
$IP=@(Get-IPAddresses)

# Tekst, mida kirjutatakse pildile (mitu rida)
$PC_text ="Masin: $PC"
$USER_text = "Kasutaja: $USER"

# Väärtustame text array
$text = ($PC_text,$USER_text) + $IP

Add-Type -AssemblyName System.Drawing
  
# Loome uue bitmapi, viimased kaks nr määravad reso
$bmp = new-object System.Drawing.Bitmap 1024,780
 
# Valime kirjastiili, millega teks kirjutatakse
$font = new-object System.Drawing.Font Consolas,18
 
# Määrame taustapintsli värvi
$brushBg = [System.Drawing.Brushes]::Black
 
# Määrame kirjutamis pintsli värvi
$brushFg = [System.Drawing.Brushes]::White
 
$graphics = [System.Drawing.Graphics]::FromImage($bmp)
$graphics.FillRectangle($brushBg,0,0,$bmp.Width,$bmp.Height)

$korgus=30

# Kirjutame teksti pildile
foreach ($number in $text) { 
	$korgus = $korgus + 20
	$graphics.DrawString($number,$font,$brushFg,50,$korgus)
  	$count++  
}
 
$graphics.Dispose()
 
# Salvestame pildi
$bmp.Save($filename)
 
# Funktsioon, mis küsib op süsteemi
$OPSYS=((get-wmiobject Win32_OperatingSystem | select Version | findstr [0-9].))

If ($OPSYS -gt 6) {
Set-WallPaper1 -Path $filename
}
Else {
Set-WallPaper-older -value $filename
}

Pythoni kodutöö

Script, mis otsib arvuti aku(de) kohta infot ning arvutab aku seisukorra (aku mahutavuse).

Pythoni lahendus

#!/usr/bin/python
#-*- coding: utf-8-*
#Autor: Urmo Laaneots, A21
#Skript otsib sülearvuti aku(de) kohta infot ja väljastab selle html'i faili.
 
import os
from os.path import join
 
#Loome html faili, kuhu tuleb info
fh = open ('aku.html', 'w')
 
#Loome standard HTML faili
fh.write('<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n')
fh.write("<html>\n")
fh.write("<head>\n")
fh.write("<title>Arvuti </title>\n")
fh.write('<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n')
fh.write("</head>\n")
fh.write("<body>\n")
 
#Väärtustame akude arvu 0ga.
akusid=0
 
# Otsime üles arvutis oleva(d) aku(d)
for root, dirs, files in os.walk('/proc/acpi/battery'):
	for name in files:
		filename = os.path.join(root, name)
 
                #Kui leiame aku info faili, siis avame selle
		if filename.endswith('info'):
			fail = open (filename)
			for rida in fail.readlines():
 
				#Kirjutame aku arvu (nt 1.).				
				if "present:" in rida:
					akusid+=1
					fh.write('<h3>Aku nr %s</h3>' %(akusid)) 
				fh.write('%s<br />\n' %(rida))
 
                                #Võtame avatud failist aku disainitud mahutavause ja viimase täislaetud väärtuse ning paneme nad int() tüüpi muutujasse
				if "design capacity:" in rida:
					design=int(rida.split('design capacity')[1].split(':')[1].split('m')[0])
				elif "last full capacity:" in rida:
					lastfull=int(rida.split('last full capacity')[1].split(':')[1].split('m')[0])
 
			#Arvutame aku seisukorra
			akuolukord= '{:.0%}'.format(lastfull/design)
 
			#Vastavalt aku seisukorrale, kirjutame seisukorra
			if (akuolukord > 80):	
				fh.write('<h3><font color="green">Aku on väga heas korras (%s)!</font></h3><br />' %(akuolukord))
			elif (akuolukord > 50):	
				fh.write('<h3><font color="brown">Aku on heas korras (%s)!</font></h3><br />' %(akuolukord))
			elif (akuolukord > 30):	
				fh.write('<h3><font color="blue">Aku on rahuldavas korras (%s)!</font></h3><br />' %(akuolukord))
			elif (akuolukord < 30):	
				fh.write('<h3><font color="red">Aku on vajab vahetamist (%s)!</font></h3>' %(akuolukord))
			fh.write('<hr width="100%">')
 
			#Sulgeme avatud failid
			fail.close()
 
#Kui akusid üldsegi ei ole, siis kuvatakse vastav info
if (akusid == 0):
	fh.write('<h2>Sellel arvutil ei ole akut!!!</h2>')
#Lõpetame html faili
fh.write("</body>\n")
fh.write("</html>")
fh.close()