【问题标题】:Deleting exact match in file删除文件中的完全匹配
【发布时间】:2012-05-28 19:29:16
【问题描述】:

我在这里进行了广泛搜索,但没有解决我的问题(php)。

场景:用户访问带有预先分配的注册号(在 datafile.txt 中)的登录页面,当在字段中输入号码时,如果存在号码,脚本将搜索文件。

如果确实存在,则继续下一步。完成下一步后,我希望它在完成后自动“删除”最初使用的号码。

我相信“搜索和替换”是要走的路,同时搜索“精确”匹配。

我的数据文件如下所示:(datafile.txt)

0
12
123
1234
12345
123456

12,如果被搜索,不会与 123 相同。

几天前我收到的一个脚本是为了完成另一项任务:

$numbers = file_get_contents("datafile.txt");

$uNumber = $_POST['uNum'];

if ( @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) ) {

echo "Numbers match";

}

我尝试为一项新任务做的事情如下,但没有成功:

$numbers = file_get_contents('datafile.txt', 'w+');

$uNumber = $_POST['uNum'];

if ( @preg_match( "/([^0-9]{$uNumber}[^0-9])/", $numbers ) ) {

$numbers = preg_replace('.$_Post["uNum"]','',$numbers);

echo "Existed but will be deleted from file. ";


} else {
echo "Message showed if not in file.";
}

任何帮助将不胜感激。

【问题讨论】:

  • 你所做的只是替换 $uNumber 的值。实际上,您要做的是替换 $uNumber 的值并将其保存为文件的新内容。如果我错了,请纠正我。
  • 是的。最初输入 1234 (uNum) 后,我希望之后将其从文件中删除。
  • 那么您应该在删除号码后更新文件。在变量更新后尝试使用php.net/manual/en/function.file-put-contents.php
  • 我试过 file_put_contents($numbers, $uNumber);在 OhMrBigshot 的代码末尾,但它对我不起作用。我可能混淆了一些东西。
  • 应该是file_put_contents(datafile.txt, $numbers);

标签: php forms file match


【解决方案1】:

这个怎么样:

$index = file_get_contents("datafile.txt"); 
$bodycont = str_replace("string to be replaced","what you want that string to be",$index);
$fh = fopen("datafile.txt","w");
fwrite($fh,$bodycont);
fclose($fh); 

或者:

 $file = file("datafile.txt", FILE_IGNORE_NEW_LINES);
 foreach($file as $text) {
 $test[] = $text;
 }

//get the size of the array

$arraysize = sizeof($test);

//use for loop to check if that string is found in the array and replace it

for($x=0;$x<$arraysize;$x++)
    {
               if($test[$x] == "$uNumber")
                {

                }
                else
                {
                   $newarray[] = $test[$x];
                }
    }
 $stringData = implode("\n",$newarray );
 $fh = fopen("datafile.txt","w");
 fwrite($fh,$stringData );
 fclose($fh);

这应该会起作用。 :D

【讨论】:

  • 谢谢。我现在正在玩弄它。我用文件中的数字 1234 进行了测试,并将其替换为 1212,但文件中也存在 123456,并且由脚本更改为 121256。我需要完全匹配。我会坚持下去,直到我得到它。哈哈
  • 那么您需要做的就是更改 str_replace 或使用更好的条件。希望这有帮助。随意升级或检查。谢谢:)
  • 试过 preg_match("/^({$uNum})$/", $index);和“uNumber”,但它在其位置写入 0(零)并且即使使用“a、a+、w+”也不会附加到文件中。我知道数据库将是可行的方法,但我对 SQL 等一无所知。
  • 你不应该使用append,因为append这个词意味着当你正在做的事情是删除或替换时添加。尝试使用第二个。并且不要使用预赛。因为完成此操作的最佳方法是 a) 将字符串放入数组中并循环遍历它以删除所述数据,或者 b) 使用 sql.
  • 您的新代码给了我内部服务器错误。似乎有一个 { 没有从我能告诉的地方关闭。
【解决方案2】:

如果它是每行文件一个数字,请使用 ^$ 来限制您的正则表达式以匹配确切的模式。

preg_match( "/^({$uNumber})$/", $numbers)

【讨论】:

  • 谢谢鲍里斯。我的消息的其余部分是否正常(第二部分),还是我需要修改其他内容?
【解决方案3】:

为什么要将正则表达式用于如此简单的事情?你可以这样:

<?php
$numbers = file_get_contents("datafile.txt");
$uNumber = $_POST['uNum'];

$numbers = explode($numbers, "\n");

foreach ($numbers as $num) {
     if ($num == $uNumber) {
         unset($num);
     }
}

$numbers = implode($numbers, "\n");

// some code that saves the file
?>

【讨论】:

  • 谢谢。我不能只使用 $numbers = file_get_contents("datafile.txt", "a");将新内容写入文件,或者我将如何处理?
  • 我想你想使用file_put_contents:php.net/manual/en/function.file-put-contents.php
  • 我试过 file_put_contents($numbers, $uNumber);但这对我不起作用。可能有一些混淆。
  • 如果你只想追加到文件,使用F_APPEND标志,否则文件被重写。确保您也编写了正确的 var,从代码的外观来看,我想说您想将 $numbers 重写为文件,或附加 $uNumber
  • 我刚刚找到了 FILE_APPEND 语句,添加了它,但无论如何,文件没有被写入,也没有被覆盖。难住了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多