【问题标题】:PHP - Adding Exception To ScriptPHP - 向脚本添加异常
【发布时间】:2013-07-03 04:26:34
【问题描述】:

好的,所以我使用的程序使用 PHP 脚本。我已将其设置为以特定方式命名剪辑,但有时我们需要更改它以添加额外的字符。

现在,根据以下信息将剪辑重命名为:*20_1 (XA)*

Scene: 20
Take: 1
Slate:
Clipname: XA001C001.mov
Select:

这是执行此操作的脚本:

function GenerateClipname($Scene,$Slate,$Take,$ClipName,$Select)
{
    global $link;
    global $NoSCounter;
    global $NoTCounter;

    $sql="SELECT count(ID) AS Counter FROM shots WHERE Scene='".SqlEscape($Scene)."' AND Select='".SqlEscape($Select)."' AND Take='".SqlEscape($Take)."'";
    $ScanResult=mysql_query($sql,$link);
    $ScanRow = mysql_fetch_array($ScanResult);
    if ($Scene=="")
    {
        $Scene=sprintf("NoScene_%d",$NoSCounter);
        $NoSCounter++;
    }
    if ($Take=="")
    {
        $Take=sprintf("NoTake_%d",$NoTCounter);
        $NoTCounter++;
    }
    $Name=$Scene;
    if ($Take!="") $Name.="_".$Take;
    if ($ClipName!="")
    {
        $Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";    
    }

    if ($Select) $Name.="*";
    return $Name;
}

我想添加的例外情况是,如果原始剪辑名称的开头只有 1 个 Alpha 字符 (A001C001.mov),那么脚本会将剪辑标记为 *20_1 (A)* 但如果它有两个,甚至三个 Alpha 字符,那么它会添加它。我知道需要影响的脚本部分是:

if ($ClipName!="")
    {
        $Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";    
    }

如果需要,我可以提供更多脚本。

【问题讨论】:

    标签: php exception


    【解决方案1】:

    您需要像这样组合 preg_match 和 strpos:

    function findFirstNonDigitPart($str) {
      $pat = '(\d+)';
      preg_match($pat,$str,$matches);
      if(count($matches) == 0) {
          return false;
      }
      $pos = strpos($str,$matches[0]);  
      return substr($str,0,$pos);
    }
    
    
    $str = "XSA1234234asfaf";
    echo findFirstNonDigitPart($str);
    

    在您的情况下,它会是(将函数粘贴到脚本中的某处):

    if ($ClipName!="") {
        $part = findFirstNonDigitPart($ClipName);
        if($part === false) {
            throw new Exception("Something wrong with the clipname");
        }
        $Name=$Name." "."(".strtoupper($part).")";    
    }
    

    【讨论】:

    • 谢谢。现在,我将在上面提供的脚本中的哪个位置添加它?我正在尝试一些东西,但当然,我对此很陌生
    • 谢谢!我会将两者都粘贴到脚本中,让你知道它是怎么回事! :)
    • 我能够使用您在上面提供的信息来解决这个问题:)。非常感谢!
    【解决方案2】:
    if ($ClipName!="")
    {
        $pattern = '#^(\\p{L}{1,3}).?*$#'; // group(letter chars, case insensitive, lenght 1-3) + other 
        $prefix = preg_replace($pattern, '$1', $ClipName); // take matching (first) group as replacement if present
        if ($prefix == $ClipName) {
            // nothing extracted (no matching prefix)
        } else {
            $Name=$Name." "."(".(strtoupper($prefix).")";
        }
    }
    

    不知道你想如何处理各种名称(例如没有 $prefix)+ 其他模式以防万一:

    '#^([a-zA-Z]{1,3}).?*$#' - 仅限英文字母字符

    '#^([a-zA-Z]+).?*$#' - 英文,不限长度(与[A-Z]{1,} 相同)

    【讨论】:

    • 谢谢。我必须在早上试试这个。该名称将始终使用 Clipname 命名,因此它可以使用该前缀:)。在寻找课程时,我对编写脚本和自学仍然很陌生。我喜欢这些东西,并从这一切中尽我所能,所以谢谢!
    • 我的第一次尝试我无法让它工作。我把它弄乱了,看看我是否做错了什么。但是,我能够从@steven 获得下面的脚本来工作:)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2012-04-08
    • 2011-01-20
    • 2018-02-11
    • 2014-06-10
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多