Код ColdFusion для чтения и фильтрации файла .cfm - PullRequest
0 голосов
/ 21 февраля 2012

Можно ли написать код ColdFusion, который выполняет следующие действия?

  1. Чтение файла .cfm
  2. Отфильтруйте файл .cfm по любому слову, к которому добавлен ".cfm".
  3. Сравните список имен файлов, найденных на шаге 2, с файлами в каталоге, чтобы выяснить, есть ли в каталоге какие-либо файлы, которых нет в файле .cfm.

На шаге 2 я пытаюсь найти имена файлов .cfm в href.

Спасибо

1 Ответ

3 голосов
/ 22 февраля 2012

Каталог моего теста был настроен с помощью reader.cfm и list.cfm.Ему удалось найти файл list.cfm в файле списка примеров и зарегистрировать файл reader.cfm как отсутствующий.

Вероятно, есть лучший способ получить список имен файлов cfm из файла.Я не гуру в регулярных выражениях, но я проверил, что это работает как хотелось.Это, вероятно, не будет работать, если ваши ссылки имеют специальные символы, такие как _ или -.Это должно дать вам кое-что для начала.

</p> <pre><code><cffile action="read" file="#expandpath('list.cfm')#" variable="fileList"> <cfset fileResult = rematchNoCase('([a-z]|[A-Z]|[0-9])+\.cfm', fileList)> <cfdirectory directory="#expandPath('.')#" action="list" filter="*.cfm" listInfo="name" recurse = "no" type="file" name="dirList"> <cfset notInFile = ArrayNew(1)> <cfoutput> <cfloop query="dirList"> <cfloop from="1" to="#arrayLen(fileResult)#" index="i"> <cfif dirList.name eq fileResult[i]> found one! #dirList.name#<br> <cfbreak> </cfif> <cfif i eq #arrayLen(fileResult)#> Item not found! #dirList.name#<br> <cfset _r = ArrayAppend(notInFile, dirList.name)> </cfif> </cfloop> </cfloop> </cfoutput> <cfdump var="#notInFile#">

Содержимое файла list.cfm, который я использовал.

</p> <pre><code><a href="someRealLink.cfm">click me to fun</a> something other thing a coldfusion.cfm thing stuff things yar.cfm blah Something.cfm 0912.cfm some123.cfm cfm list.cfm

Первый цикл циклически просматривает содержимое нашего каталога.Второй цикл циклически перебирает записи массива чисел, которые мы имеем в файле cfm, который мы смотримПервый блок if просматривает текущее содержимое массива и сравнивает его со значением имени внешнего цикла.2-й if смотрит на текущее значение местоположения массива и максимально возможное значение местоположения массива.Мы знаем, достигли ли мы текущего местоположения == максимально возможного местоположения - элемент внешнего цикла (список каталогов) не был найден во внутреннем цикле (массив файлов).Это делается для <cfbreak> в первом блоке if.Это <cfbreak> выйдет из 2-го внутреннего цикла, когда мы найдем правильное совпадение.Это предотвращает выполнение 2-го блока if для vaild find.

Надеюсь, это поможет.Не забудьте принять ответ, если вы чувствуете, что он получил ответ XD

...