Răsfoiți Sursa

SVI Рабочее сохранение

SVI 1 zi în urmă
părinte
comite
b30e5ddfa4

+ 6 - 0
v4/d0/defs/def_txt/def_txt_let.go

@@ -52,6 +52,12 @@ func (sf LTxt) Get() def_spec_base.Txt {
 	return def_spec_base.Txt(sf.val.String())
 }
 
+// Str -- возвращает строковое представление
+func (sf LTxt) Str() string {
+	sf.CheckOwner()
+	return sf.val.String()
+}
+
 const (
 	strOut = `LTxt(
 	OwnerPass(%v)

+ 7 - 0
v4/d0/defs/def_txt/def_txt_let_test.go

@@ -40,6 +40,13 @@ func (sf *tester0) method() {
 		}
 	}
 	{ // string
+		_str := sf.lTxt.Str()
+		if _str != "test_val" {
+			sf.t.Fatalf("method(): res(%v)!=val(%v)", _str, "test_val")
+		}
+		_ = sf.lTxt.String()
+	}
+	{ // txt
 		_str := sf.lTxt.Get()
 		if _str != "test_val" {
 			sf.t.Fatalf("method(): res(%v)!=val(%v)", _str, "test_val")

+ 25 - 1
v4/d0/defs/def_txt/def_txt_mut.go

@@ -44,7 +44,31 @@ func (sf *MTxt) TrimSuffix[T def_spec_fn.TxtConstraint](suffix T) def_spec_base.
 
 // Atoi -- устанавливает и возвращает возможное число.
 func (sf MTxt) Atoi() *result.Result[def_spec_base.Num] {
-	iRes, err := strconv.Atoi(sf.String())
+	sf.CheckOwner()
+	fnCut := func(val string) string {
+		for len(val) > 0 {
+			isCut := false
+			litBeg := string([]rune(val)[0])
+			if litBeg == " " || litBeg == "\t" || litBeg == "\n" {
+				val = val[1:]
+				isCut = true
+			}
+			runes := []rune(val)
+			litEnd := string(runes[len(runes)-1])
+			if litEnd == " " || litEnd == "\t" || litEnd == "\n" {
+				val = string(runes[:len(runes)-1])
+				isCut = true
+			}
+			if !isCut {
+				break
+			}
+		}
+		return val
+	}
+	val := sf.Str()
+	val = fnCut(val)
+	sf.Set(val)
+	iRes, err := strconv.Atoi(sf.Str())
 	if err != nil {
 		err := fmt.Errorf("LetTxt.Atoi(): val(%q) not Int, err=\n\t%w",
 			sf.String(), err)

+ 20 - 0
v4/d0/defs/def_txt/def_txt_mut_test.go

@@ -20,6 +20,26 @@ func TestTxtMut(t *testing.T) {
 	sf.mut()
 	sf.add()
 	sf.trim()
+	sf.atoi()
+}
+
+// Получение числа
+func (sf *tester1) atoi() {
+	sf.t.Log("atoi")
+	{ // Правильное число
+		sf.mTxt.Set("  123  ")
+		res := sf.mTxt.Atoi()
+		if res.IsErr() {
+			sf.t.Fatalf("atoi(): err=%v", res.Err())
+		}
+	}
+	{ // Неправильное число
+		sf.mTxt.Set("123a")
+		res := sf.mTxt.Atoi()
+		if res.IsOk() {
+			sf.t.Fatalf("atoi(): err==nil")
+		}
+	}
 }
 
 // Обрезка суффикса