Jsem to psal hned, ať ty soubory dodá. Napsal bych mu to ve vbs bez nutnosti dalších instalací. Takhle je ku ničemu...
Skriptů už tu mám požehnaně.
Takové jako jednou je to tak a pak to tak není je jaksi k ničemu.
Dodatečně přidáno po 5 hodinách 37 minutách 54 vteřinách:Tak taky něco přihodím
Vzorové soubory:
Kód: Vybrat vše
APPLE Apple
ORANGE Orange
BLUE Blue
THIS_IS_ THE_FIRST This is the first
Kód: Vybrat vše
APPLE Jablko
APPLE_2 Jablko2
ORANGE Pomeranč
APRICOT Meruňka
THIS_IS_ THE_FIRST Tohle je první
Výsledek:
Kód: Vybrat vše
APPLE Jablko
APPLE_2 Jablko2
ORANGE Pomeranč
THIS_IS_ THE_FIRST Tohle je první
APRICOT Meruňka
Skript je napsaán ve visual basicu - postačí si kód zkopírovat do notepadu a uložit s příponou .vbs. Spustit poklepáním.
Kód: Vybrat vše
'*****************************************************
'* Skript projde textové soubory *
'* Vyhledá anglický text v cze souboru, *
'* pokud ho najde, vypíše řádek cze souboru *
'* Prohledáváné soubory musí být ve stejném adresáři *
'* Výstup sloucit.txt *
'* *
'* Vytvořeno pro PC-HELP *
'* Etienn@Script v 1.0 *
'*****************************************************
Option Explicit
Dim path, fso, srce, srccz, cilFile, txtStreame, txtStreamcz, txtStream2, txtStreamsl, signal
Dim Text, slovoe, i, slovocz, radek, znak, linka, txtSreamsl, linecz(), slouceny ()
ReDim linecz(100)
ReDim slouceny(150)
' zjisteni cesty ke skriptu
path = WScript.ScriptFullName
path = Left(path, InStrRev(path, "\"))
' vytvoreni objektu pro pristup k souborum
Set fso = CreateObject("Scripting.FileSystemObject")
srce = path & "eng.txt"
srccz = path & "cze.txt"
' Test seznamu, pokud neni, skonci
If Not fso.FileExists(srce) Or Not fso.FileExists(srccz) Then
WScript.Echo "Soubor (soubory) chybí."
Set fso = Nothing
WScript.Quit
End If
znak = Chr (32)
' naplnění pole CZ
Set txtStreamcz = fso.OpenTextFile(srccz)
i = 0
Do While Not (txtStreamcz.AtEndOfStream)
linecz(i) = txtStreamcz.ReadLine
'WScript.Echo linecz(i)
i = i + 1
Loop
Set txtStreamcz = Nothing
cilFile = path & "sloucit.txt"
Set txtStreame = fso.OpenTextFile(srce)
Set txtStream2 = fso.OpenTextFile(cilFile, 8, True)
' hledani prvniho anglickeho slova
Do While Not (txtStreame.AtEndOfStream)
Text = txtStreame.ReadLine
'WScript.Echo Text
i = 1
Do While Not znak = Mid (Text, i, 1)
i = i + 1
Loop
slovoe = Mid (Text, 1, i - 1)
'WScript.Echo slovoe
Najdi(slovoe)
Loop
Set txtStream2 = Nothing
'doplnění z czeska
' nactení pole slouceneho
Set txtStreamsl = fso.OpenTextFile(cilFile)
i = 0
Do While Not (txtStreamsl.AtEndOfStream)
slouceny(i) = txtStreamsl.ReadLine
'WScript.Echo slouceny(i)
i = i + 1
Loop
Set txtStreamsl = Nothing
' hledani a doplneni chybejicich z cze
Set txtStream2 = fso.OpenTextFile(cilFile, 8, True)
i = 0
For Each linka In linecz
signal = 0
For Each radek In slouceny
If radek = linka Then signal = 1
Next
If signal = 0 Then txtStream2.WriteLine linecz(i)
i = i + 1
Next
Set txtStream2 = Nothing
Set txtStreame = Nothing
Set fso = Nothing
WScript.Echo "Skript doběhl"
'________________________________________
'Funkce hledání
'________________________________________
Function Najdi(txt)
For Each radek In linecz
If InStr (radek, txt) Then txtStream2.WriteLine radek
Next
End Function
A teď něco k použití:
- soubory jsou eng.txt a cze.txt a musí být ve stejném adresáři jako skript. Lhostejno kde, skript si cestu zjistí.
- skript kontroluje, zda soubory existují, pokud ne, nahlásí, že chybí.
- výsledný soubor je sloucit.txt, bude ve stejném adresáři. Pokud už tam takový je, skript ho nemaže, ale dopisuje na jeho konec.
- ukončení práce ohlásí "skript doběhl"
A teď:
- jména souborů lze měnit, v proměnných
srce a
srccz (řádek 25,26)
- jméno výsledného souboru lze měnit - proměnná
cilFile (ř.48)
- oddělovač lze měnit - proměnná
znak (ř.36). Lze ho zadat rovnou v uvozovkách např.: znak = " " (mezera), nebo jak mám já v ascii kódu
Chr(32) je kód pro mezeru (
https://jbwyatt.com/ascii.html), to kdybys chtěl použít speciální znaky, jako tab, nebo enter.
- Skript pro prohledávání používá dynamická pole. Pro český soubor je to linecz() a pro výsledek je to slouceny(). Protože jsou dynamická je třeba je dimenzovat, takže v
ReDim (ř.15,16) musí být minimálně stejný počet řádků co je v českém souboru a předpokládaný počet řádků pro výsledný. Nastaveno je 100/150, pokud budeš mít soubory s 1000 řádků, je třeba to změnit. Není třeba tam rvát miliony, zbytečně by to zabíralo paměť. Měl jsi dodat vzorové soubory, líp by to šlo odladit.