string pad/rpad/lpad

This commit is contained in:
2021-02-28 12:53:06 +01:00
parent 08b5053829
commit 46b29fc229
7 changed files with 49 additions and 28 deletions

13
ml.cpp
View File

@@ -1496,11 +1496,21 @@ namespace builtin {
eval_args(args, env);
if (args.size() != 2) // if (args.size() < 2 || args.size() > 3)
throw MlError(MlValue("regex_search", regex_search), env, args.size() > 3 ? TOO_MANY_ARGS : TOO_FEW_ARGS);
throw MlError(MlValue("regex_search", regex_search), env, args.size() > 2 ? TOO_MANY_ARGS : TOO_FEW_ARGS);
return MlValue(regexp_search(args[0].as_string(), args[1].as_string()));
}
MlValue string_pad(std::vector<MlValue> args, MlEnvironment &env) {
eval_args(args, env);
if (args.size() != 4)
throw MlError(MlValue("regex_search", regex_search), env, args.size() > 4 ? TOO_MANY_ARGS : TOO_FEW_ARGS);
// TODO validate len > 0 etc
return MlValue::string(string_padd(args[0].as_string(), args[1].as_int(), args[2].as_string()[0], (args[3].as_string()=="rpad")));
}
MlValue display(std::vector<MlValue> args, MlEnvironment &env) {
eval_args(args, env);
@@ -1724,6 +1734,7 @@ MlValue MlEnvironment::get(const std::string &name) const {
if (name == "display") return MlValue("display", builtin::display);
if (name == "replace") return MlValue("replace", builtin::replace);
if (name == "regex-search?") return MlValue("regex-search?", builtin::regex_search);
if (name == "string-pad") return MlValue("string-pad", builtin::string_pad);
// Casting operations
if (name == "int") return MlValue("int", builtin::cast_to_int);