这是一个很长的问题,我无法全部了解。但是,我正在尝试在没有 MySQL 的情况下做一些事情并使用文件。不是首选方法,但我需要弄清楚。
1 - 我想打开一个单列中的电子邮件文件。
email1@email.com
evail2@email.com
etail3@email.com
可能是 100k 行!
2- 然后我想去掉电子邮件的前两个字符并创建文件夹。(“e/em”“e/ev”或“e/et”每个例子*1(如果!存在自然))
3- 创建一个 txt 文件,命名为两个字母 *1(如果!存在)。(路径示例 = e/em/em.txt e/ev/ev.txt 和 e/et/et.txt)
4- 使用以上述前两个字母开头的唯一电子邮件附加这些文件。(因此,e/em/em.txt 将包含 email1@email.com,e/ev/ev.txt 将包含 evail2@email.com 等)
我知道这很疯狂。但这就是我需要做的。(我被 MySQL 宠坏了)。
我这样做的尝试是如此痛苦和耗时......我只需要来这里寻求指导。
如果有帮助,我很乐意安装文件处理模块。
*1 如果每次都避免目录和文件检查是有益的,我想运行一个脚本来创建所有可能的文件夹,并提前用每个文件夹的空文件填充它们。创建 26 个文件夹 (az),每个文件夹包含 26 种可能的组合 (/aa /ab /ac),所有文件夹都包含创建的适当的两个字母的空白文件。
我需要一些关于如何做这一切的课程。虽然很傻,但我仍然需要知道如何。
添加:
目录和文件名实际上可以以 - 或 _ 开头
仍然需要调整,但感谢您的帮助:
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI ':standard';
print CGI::header();
use File::Basename;
use File::Path qw/make_path/;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
my $path='/home/xxxx/public_html/some/directory';
my $file='1.txt';
my %EmailAddresses;
open my $IN, '<', $path.'/'.$file or die $!;
while (<$IN>) {
chomp;
$_=~ s/\s//g;
undef $EmailAddresses{$_};
}
for my $EmailAddress(keys %EmailAddresses) {
## need to sanitize substr here for use below
my $filename= join '/', substr($EmailAddress,0,1), substr($EmailAddress,0,2), substr($EmailAddress,0,2) . '.txt';
$filename = $path.'/'.$filename;
my $dir = dirname($filename);
make_path($dir) unless -d "$dir";
open (OUT, '>>', $filename) || die $!;
#need to check for dupes and remove other possible issues!
print OUT $EmailAddress, "\n";
close OUT;
}