Как я получаю содержание строки минус расширение в ColdFusion?

Вам нужно использовать whereRaw() для полностью необработанных запросов. Таким образом, он не будет ожидать каких-либо других переменных, хотя вы можете при необходимости.

$query->whereRaw($fstr.' >= 70');

Если вам нужно передать переменные для цитирования, вы просто передадите их в виде массива:

$query->whereRaw("f_user_matching_score(?, admin__user.id_user, ?, ?, ?, 0, 0, ?) >= 70", [4, 1, 0, 0, ',']);
7
задан Shawn Holmes 12 January 2012 в 19:25
поделиться

4 ответа

Используйте функции Списка в ваших интересах.

<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>

Знайте, что это только работает на имена файлов, которые на самом деле имеют расширение файла (который определяется как вещь после последней точки). Для создания этого более безопасным следующее лучше:

<cfset ExtensionIndex = ListLen(FileFullName, ".")>
<cfif ExtensionIndex gt 1>
  <cfset FileExt  = ListGetAt(ExtensionIndex , ".")>
  <cfset FileName = ListDeleteAt(FileFullName, ExtensionIndex, ".")>
<cfelse>
  <cfset FileExt  = "">
  <cfset FileName = FileFullName>
</cfif>

Усложнить вещи немного далее: могут быть файлы, которые запускаются с точки. Могут быть имена файлов, которые содержат много смежных точек. Возврат функций списка неправильно заканчивается для них, поскольку они игнорируют пустые элементы списка. Могут также быть файлы, которые имеют точки, но никакое расширение. Они могут только быть обработаны при обеспечении дополнительного белого списка: ListFindNoCase(FileExt, "doc,xls,ppt,jpg"). Если Вы хотите объяснить все это, вероятно, необходимо уйти в отставку к reguar выражению:

<cfset FileExtRe = "(?:\.(?:doc|xls|ppt|jpg))?$">
<cfset FileName  = REReplaceNoCase(FileExtRe, FileFullName, "")>

Для разделения имени файла от пути ColdFusion обеспечивает отличные функции, которые также обрабатывают различия в платформе: GetFileFromPath() и GetDirectoryFromPath()

9
ответ дан 6 December 2019 в 09:23
поделиться

Ответ Tomalak хорош, но это может стать хитрым. Учитывая файл под названием "mydoc.ver1.doc" (допустимое имя файла Windows), который является именем файла и который является расширением? Что, если существует filepath?

Можно все еще усилить функции списка в ваших интересах, однако, даже в этих сценариях.

Можно легко проанализировать файл от пути с

fullFileName=listLast(fieldname,"\/")

Если Вы предполагаете, что имя файла - все перед точкой, то

theFileName=listFirst(fullFileName,".") 

будет работать.

Если Вы хотите удостовериться, чтобы Вы получили все, но что после прошлого периода, то немного обмана необходимо, но не очень. Нет a listAllButLast() функция (хотя такая вещь могла бы существовать на CFLIB.org), но существует два способа, которыми я могу думать для получения то, что Вы после.

fileName=reverse(listRest(reverse(fullFileName),"."))

или

fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")

Как с предложением Tomalak, однако, это сломается на имени файла, которое испытывает недостаток в расширении. Обертывание этого в a <cfif listLen(fullFileName,".") GT 1> будет составлять это.

6
ответ дан 6 December 2019 в 09:23
поделиться

Текущее принятое решение не будет работать на файл, который не содержит расширение.

Можно решить это при помощи регулярного выражения для разделения расширения, только если оно существует:

<cfset FileName = rereplace( FullFileName , '\.[^.]+$' , '' ) />


Это все еще не могло бы быть прекрасно - у Вас мог бы быть файл, который имеет a., но это не считают расширением - можно решить это или при помощи списка известных расширений полосы, или путем ограничения, сколько времени расширение Вы примете (например, до 5):

<cfset FileName = rereplace( FullFileName , '\.(jpg|png|gif|bmp)$' , '' ) />
<cfset FileName = rereplace( FullFileName , '\.[^.]{1,5}$' , '' ) />
3
ответ дан 6 December 2019 в 09:23
поделиться

Таким образом, сначала необходимо найти положение последнего fullstop (мог быть больше чем один fullstop в полном имени файла). Я не думаю, что Coldfusion имеет функцию находки, которая работает назад, так инвертируйте строку сначала:

<cfset Position = Find(".", Reverse(FullFileName))>

Если это возвращает нуль затем, Вы не имеете fullstop в имени файла, таким образом обрабатываете соответственно. Еще...

<cfset Filename = Left(FullFileName, Len(FullFileName) - Position>
1
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: