M>>parse_dirs([]) -> M>> []; M>>parse_dirs([H|T]) -> M>> [H, get_files(H)] ++ [parse_dirs(T)].
G>странный формат. у тебя в списке чередуются директории и списки файлов. Нехорошо. G>Возьми их в тупл, штоль.
Ага, есть такое Это одна из итераций формата. В один момент были и туплы. Сейчас уже не помню, почему остановился на таком.
get_files(Dirs) ->
[{Y,filelib:file_size(Y)}|| Y <- lists:append([filelib:wildcard(X++"/*")||X <- Dirs])].
Это захватит и директории тоже. Вдобавок список получается не очень хорошим — сначала идут все абсолютно директории и поддиректории, а потмо все файлы во всех поддиректориях
CS>Для сравнения то же самое но на моем tiscript (вариант ECMAScript)
function xdir( path )
{
function foreach(n, func)
{
func(n); // вызываем func для каждого node файловой системы.// а что за func и откуда берется? :)if( n.isdir )
for(var sn in n.nodes) foreach( sn, func );
}
foreach( new FileSystem.Node(path),
function(n) { stdout.printf("%s,%d\n",n.path, n.size); } );
}
// поехали!
xdir("/");
CS>В принципе по всем половым признакам ECMAScript (JavaScript) это ФЯ.
M> function foreach(n, func) M> { M> func(n); // вызываем func для каждого node файловой системы. M> // а что за func и откуда берется?
Передается как параметр в функцию.
Собственно говоря, чем это отличается от Delphi.Net?
(в Delphi/Win32 и Turbo Pascal нет встроенныx итераторов, конструкция типа Visual Vasic'овского for each VAR in COLLECTION do )
анонимными функциями (да и то не уверен насчет Delphi для грядущего повсеместно .Net 2) ?
Честно говоря по-моему обычный императивный код по сути.
M>get_files(Dirs) ->
M> [{Y,filelib:file_size(Y)}|| Y <- lists:append([filelib:wildcard(X++"/*")||X <- Dirs])].
M>
M>Это захватит и директории тоже. Вдобавок список получается не очень хорошим — сначала идут все абсолютно директории и поддиректории, а потмо все файлы во всех поддиректориях
Отфильтровать забыл.
get_files(Dirs) ->
[{Y,filelib:file_size(Y)}|| Y <- lists:append([filelib:wildcard(X++"/*")||X <- Dirs]),not filelib:is_dir(Y)].
M>В общем мне понравилось Но вопрос — а можно еще кратчее и красивше
В общем, мне не понравилось Не обрабатываются директории, содержащие Юникод. Видать что-то где-то надо править ручками.... Ну да ладно, мне пока и этого хватает
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
CS>>В принципе по всем половым признакам ECMAScript (JavaScript) это ФЯ.
LCR>Только "грязный" — куча побочных эффектов. Плюс:
Что имеется ввиду? Какие побочные эффекты?
LCR>Что возвращяет функция foreach?
все функции чег-то возвращают. Если явно не задано то
в стандарте определено что возвращается undefined value в этом случае.
LCR>Что возвращает функция xdir?
undefined.
LCR>Лямбды — это уже интересно
А вот кстати есть ли где определение ФЯ как классов?
Что должен иметь язык чтобы он считался ФЯ?
А зачем тут анонимную функцию объявлять ?
Нельзя разве напрямую передать is_dir ?
К осожалению, насколько понял, синтаксис первый вариант не пропустит (а почему? не умеет, или есть принципиальные возражения?), но второй должен работать.
Здравствуйте, Arioch2, Вы писали:
A>К осожалению, насколько понял, синтаксис первый вариант не пропустит (а почему? не умеет, или есть принципиальные возражения?)
A>
Это с двоеточием-то ? И все равно могли какой-нибудь синтаксис придумтаь про красивше и попонятнее
Кстати, обычные термы могут начинаться с подчеркивание или нет? Если могут, то как отличать терм от переменной, по первой букве которая не-подчеркивание ?
А готовые библиотечные функции использовать что, уже некошерно ?
start()->
L1=filelib:fold_files(".","[a-zA-Z0-9_]*",true,fun(X,A)->[{X,filelib:file_size(X)}|A] end,[]),
[io:fwrite("~p~n",[X])||X<-L1],
ok.
выводит такое :
Здравствуйте, Mamut, Вы писали:
M>А что делать с директориями и файлами, которые содержат Юникод в названиях?
А как такое может быть ?
По какими ОСями ?
M>>А что делать с директориями и файлами, которые содержат Юникод в названиях? G>А как такое может быть ? G>По какими ОСями ?
Под WinXP. Например, у меня сейчас валяется фильм, в названии файла которого — японские символы. Часть музыки на диске — с турецкими символами. Винда настроена под русскую локаль
M>>А что делать с директориями и файлами, которые содержат Юникод в названиях? G>А как такое может быть ?
Запрещено? И зачем тогда Эраднгу Юникод ?
G>По какими ОСями ?
А под какими не может ?
Здравствуйте, Mamut, Вы писали:
M>Под WinXP. Например, у меня сейчас валяется фильм, в названии файла которого — японские символы. Часть музыки на диске — с турецкими символами. Винда настроена под русскую локаль
Насколько я знаю, Ерланг с юникодом не работает — так что, скорее всего, тут облом
Здравствуйте, gandalfgrey, Вы писали:
G>Здравствуйте, Mamut, Вы писали:
M>>Под WinXP. Например, у меня сейчас валяется фильм, в названии файла которого — японские символы. Часть музыки на диске — с турецкими символами. Винда настроена под русскую локаль
G>Насколько я знаю, Ерланг с юникодом не работает — так что, скорее всего, тут облом
Вот это правда облом. У него же все строки юникодные !!!
Это вообще в его либаз отсутствует, или на конкретных платформаx ?
Здравствуйте, Arioch2, Вы писали:
A>Вот это правда облом. У него же все строки юникодные !!! A>Это вообще в его либаз отсутствует, или на конкретных платформаx ?
Все библиотечные функции работы со строками предполагают, что это ASCII-8. То-есть целое цисло < 256
есть какие-то либы (внешние) для юникода, но сам никогда не использовал
а вот интересно, dir показывает юникодные имена файлов ?
Здравствуйте, Arioch2, Вы писали:
A>Вот это плохо. A>Надо будет пристальнее к ejabberd присмотреться, он вероятно свои реализует функции ? A>Не было обсуждений насчет юникода в ErLang'e ? ведь наверняка копья уже ломались, неизветсно с каким результатом.
В мэйл-листе эту тему долго пережевывали, но ни к чему определенному не пришли
Есть либа SO WAP !, в ней поддержка юникода сделана
В принципе, стандартные функции переделать не сильно напряжно будет
хотя ! >string:len([0,65],[0,66],[0,67]]).
3 >string:chr([0,65],[0,66],[0,67]],[0,66]).
2 >string:tokens([0,65],[0,66],[0,67]],[0,66]]).
[[0,65]],[0,67]]]
работает для 16 битного !
о как !
но вот ввод-вывод по прежнему проблематичен
A>>Вот это правда облом. У него же все строки юникодные !!! A>>Это вообще в его либаз отсутствует, или на конкретных платформаx ? G>Все библиотечные функции работы со строками предполагают, что это ASCII-8. То-есть целое цисло < 256 G>есть какие-то либы (внешние) для юникода, но сам никогда не использовал G>а вот интересно, dir показывает юникодные имена файлов ?
Который финдовый? Нет
Explorer — без проблем. Большая часть программ под виндой испытывает проблемы с распознаванием таких файлов/директорий (даже MS Office таким грешит — не знаю, как в последней версии)
Здравствуйте, Трурль, Вы писали:
G>>Все библиотечные функции работы со строками предполагают, что это ASCII-8. То-есть целое цисло < 256 Т>Мне кажется, им пофиг 256.
Да, я уже заметил свою ошибку и уже даже написал о ней выше. Проблема остается со вводом-выводом — вот он не осуществляет никакого перекодирования. А используемые АПИшные функции — байтовые