On 12/03/2014 03:38 PM, Adrian Sevcenco wrote:
> Salut! Datele problemei : dindu-se un fisier de start sa se gaseasca
> recursiv in continut toate fisierele X din toate fisierele X mentionate
> (si tot asha) pina cind lista nu mai e updatada.
>
> Ce m-am priceput pina acum sa fac e o functie ce cauta in fisierul
> argument toate celelalte fisiere:
> search_macro()
> {
> local __resultarg=$2
> local __macro_list=`grep -e '\.C' $1 | grep LoadMacro | tr -d "
> \t\r" | awk -F"\"" '{print $2;}'`
>
> local __list=""
> for m in $__macro_list
> do
> __list=$__list" "`eval echo -e "$m"`
> done
>
> if [[ "$__resultarg" ]]; then
> eval $__resultarg="'$__list'"
> else
> echo "$__list"
> fi
> }
>
> ce imi returneaza lista de fisiere .C din fisierul argument.
>
> 1. In afara de c++ exista modalitati mai simple si elegante de a face asta?
>
> 2. Aveti idee cum se poate face conditia "list (not) updated" ?
> ( poate ceva de genul old_list=$list; list=$new_list;
> if [ "x$list" -ne "x$old_list" ] exit 0 ) ?
>
> 3. cum pot sa fac functia recursiva?
> sa fac in functia search macro o bucla peste __macro_list in care chem
> search_macro si un break cind nu mai e lista updatata?
Salut,
Poti sa ai functii recursive in bash.
Faci o functie care primeste ca argument un nume de fisier.
Functia asta cauta toate numele de fisiere referentiate in fisierul
respectiv
si se reapeleaza cu numele respectivului fisier.
De exemplu, in python ar arata cam asa:
-----------------
#!/usr/bin/python
import sys
def file_finder(filename):
try:
f = open(filename)
file_list.append(filename)
for line in f:
tag, nextfile = line.strip().split(":")
if tag == "filename":
file_finder(nextfile)
except:
print "File not found"
if __name__ == '__main__':
file_list = []
if len(sys.argv) == 2:
file_finder(sys.argv[1])
for i in file_list:
print "Looked into:" + i
else:
print "Expecting 1 argument, the name of the first file."
-----------------
Aici ma uit dupa liniile de forma "filename:<nume_fisier>" si caut
recursiv in toate. Scriptul e chemat cu 1 argument care e numele
primului fisier.
La sfirsit tiparesc lista fisierelor vizitate (nu e foarte frumos cum
scriu in lista aia globala, dar asta e).
Mai elegant ar fi ca functia recursiva sa returneze ceva pe conditia de
oprire, dar cum nu ai specificat ce vrei sa faci in cazul asta....
cel mai bun bash e pythonu'
Cip
> Multumesc frumos de idei!
> Adrian
>
>
>
> _______________________________________________
> RLUG mailing list
> [email protected]
> http://lists.lug.ro/mailman/listinfo/rlug
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug