⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.pm

📁 普通的ETL工具
💻 PM
📖 第 1 页 / 共 2 页
字号:
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::TrimLeading;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The <&trim()> macro returns I<expr> with the specified leading I<trim-chars> character(s) removed. If I<trim-chars> is not specified, then the default value is space character.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&trim_leading(E<lt> I<expr> E<gt>, [ E<lt> I<trim-chars> E<gt> ])'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'trim_leading');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		my $trim_chars = $_[1];
		$trim_chars =~ s/['"]//g;
		$c->newline_off();
		$c->code("&{sub{");
		$c->code("my \$tmp=$_[0]; ");
		$c->code("while (\$tmp ne '' && substr(\$tmp, 0, 1) =~ /[$trim_chars]/) ");
		$c->code("{ \$tmp = substr(\$tmp, 1); }");
		$c->code(" \$tmp; ");
		$c->code("}}");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::ClipStr;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> with all leading and trailing spaces removed.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&clip_str(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'clip_str');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("do{ $_[0] =~ m/^\\s*(.*?)\\s*\$/; \$1; }");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::LeftClipStr;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> with all leading spaces removed.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&left_clip_str(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'left_clip_str');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate();
		$c->code("do{ $_[0] =~ m/^\\s*(.*)/; \$1; }");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::RightClipStr;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> with all trailing spaces removed.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&right_clip_str(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'right_clip_str');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("do{ $_[0] =~ m/(.*?)\\s*\$/; \$1; }");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::LeftPadStr;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> padded with the specified I<pad-char> character on the left, and up to I<len> maximum length.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&left_pad_str(E<lt> I<expr> E<gt>, E<lt> I<pad-char> E<gt>, E<lt> I<len> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'left_pad_str');
	use Class::STL::ClassMembers::Constructor;
	sub translate # field, pad_char, pad_size
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("($_[1] x ($_[2] - length($_[0]))) . $_[0] ");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::RightPadStr;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns I<expr> padded with the specified I<pad-char> character on the right, and up to I<len> maximum length.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&right_pad_str(E<lt> I<expr> E<gt>, E<lt> I<pad-char> E<gt>, E<lt> I<len> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'right_pad_str');
	use Class::STL::ClassMembers::Constructor;
	sub translate # field, pad_char, pad_size
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("$_[0] . ($_[1] x ($_[2] - length($_[0])))");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::Spaceout;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Compresses sequences of one or more spaces into one space.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&spaceout(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'spaceout');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("do{ my \$tmp=$_[0]; \$tmp =~ s/\\s+/ /g; \$tmp; }");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::RemoveSpaces;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Deletes all spaces from the value in I<expr>.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&remove_spaces(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'remove_spaces');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("do{ my \$tmp=$_[0]; \$tmp =~ s/\\s+//g; \$tmp; }");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::Translate;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The F<&translate()> macro returns the first argument I<expr> with all occurrences of each character in I<from-list> replaced by its corresponding character in I<to-list>. Characters in I<expr> that are not in I<from-list> are not replaced. The argument I<from-list> can contain more characters than I<to-list>. In this case, the extra characters at the end of I<from-list> have no corresponding characters in I<to-list>. If these extra characters appear in I<expr>, then they are replaced by the last character in I<to-list>, unless the modifier value of d is specified -- in this case they are removed.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&translate(E<lt> I<expr> E<gt>, E<lt> I<from-list> E<gt>, E<lt> I<to-list> E<gt> [, E<lt> I<modifier> E<gt> ])'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'translate');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("&{sub{ my \$tmp=$_[0]; \$tmp =~ tr/$_[1]/$_[2]/@{[ $_[3] ? $_[3] : '' ]}; \$tmp; }}");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::Amount;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Returns a string format for the numeric value in I<expr> with up to I<decimal-places> precission.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&amount(E<lt> I<expr> E<gt> [, E<lt> I<decimal-places> E<gt> ])'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'amount');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("sprintf(qq{%.@{[ 
				defined($_[1]) ? $_[1] : $self->configuration()->default_decimal_places() 
			]}f}, $_[0])");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::ExtractInit;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The I<&extract_init()> macro returns the 1st character of each word in the contents of the string in I<expr>. I<expr> can be any valid expression. An example of usage for this macro is to extract the initials from a full name string value.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&extract_init(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'extract_init');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("join(' ', map(substr(\$_, 0, 1), split(/\\s+/, $_[0])))");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::Initcap;
	use base qw(ETL::Pequel3::Type::Macros::String::Abstract);
	use Class::STL::ClassMembers 
		Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'The F<&initcap()> macro will return the string expression in I<expr> with all the words capitalized in their first letter and with the rest of the word in lowercase.'),
		Class::STL::ClassMembers::DataMember->new(name => 'usage', default => '&initcap(E<lt> I<expr> E<gt>)'),
		Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'initcap');
	use Class::STL::ClassMembers::Constructor;
	sub translate
	{
		my $self = shift;
		my $c = $self->SUPER::translate(@_);
		$c->code("&{sub{");
		$c->code("my \$tmp=$_[0]; ");
		$c->code("\$tmp=~s/((^\\w)|(\\s\\w))/\\U\$1/g; ");
    	$c->code("\$tmp=~s/([\\w']+)/\\u\\L\$1/g;  ");
		$c->code("\$tmp; ");
		$c->code("}}");
		return $c;
	}
}
# ----------------------------------------------------------------------------------------------------
{
	package ETL::Pequel3::Type::Macros::String;
	use ETL::Pequel3::Type::Extension;
	use base qw(ETL::Pequel3::Type::Extension::Abstract);
	use Class::STL::ClassMembers;
	use Class::STL::ClassMembers::SingletonConstructor;
	sub new_extra
	{
		my $self = shift;
		$self->catalogue()->macros()->push_front(
        	ETL::Pequel3::Type::Macros::Trim->new(),
        	ETL::Pequel3::Type::Macros::Spaceout->new(),
        	ETL::Pequel3::Type::Macros::Length->new(),
        	ETL::Pequel3::Type::Macros::Substr->new(),
        	ETL::Pequel3::Type::Macros::Index->new(),
        	ETL::Pequel3::Type::Macros::Sprintf->new(),
        	ETL::Pequel3::Type::Macros::RightIndex->new(),
        	ETL::Pequel3::Type::Macros::Lc->new(),
        	ETL::Pequel3::Type::Macros::Uc->new(),
        	ETL::Pequel3::Type::Macros::LcFirst->new(),
        	ETL::Pequel3::Type::Macros::UcFirst->new(),
        	ETL::Pequel3::Type::Macros::LcFirstAbbr->new(),
        	ETL::Pequel3::Type::Macros::UcFirstAbbr->new(),
        	ETL::Pequel3::Type::Macros::TrimTrailing->new(),
        	ETL::Pequel3::Type::Macros::TrimLeading->new(),
        	ETL::Pequel3::Type::Macros::ClipStr->new(),
        	ETL::Pequel3::Type::Macros::LeftClipStr->new(),
        	ETL::Pequel3::Type::Macros::RightClipStr->new(),
        	ETL::Pequel3::Type::Macros::LeftPadStr->new(),
        	ETL::Pequel3::Type::Macros::RightPadStr->new(),
        	ETL::Pequel3::Type::Macros::RemoveSpaces->new(),
        	ETL::Pequel3::Type::Macros::Initcap->new(),
        	ETL::Pequel3::Type::Macros::Translate->new(),
        	ETL::Pequel3::Type::Macros::ExtractInit->new(),
        	ETL::Pequel3::Type::Macros::Amount->new(),
		);
		return $self;
	}
}
# ----------------------------------------------------------------------------------------------------
1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -