Go: обработка текстовой информации

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: обработка текстовой информации

Непрочитанное сообщение Olej » 17 фев 2024, 21:31

Как-то совсем забыл, отметить здесь то, что вошло вошло даже в редактуру книги Книга: "Linux: многопроцессорная эффективность. Выбираем Go"
... то что касается разных способов консольного ввода (CLI программ) данных :-(
Все примеры здесь в архиве.
Из той же рукописи книги:
Мы построим несколько схем ввода с клавиатуры строчных данных (данные вводимые с клавиатуры всегда строчные, а что с ними уже делать дальше — это вы решите сам затем в программном коде). Но производим ввод так, чтобы иметь «цивильный» способ завершения этого ввода, а не так чтобы грубо «рубить» всю программу по Ctrl+C. Завершать ввод мы будем по традиционному в UNIX «конец ввода» (EOF): клавиатурной комбинации Ctrl+D, а ещё, альтернативно, по вводу пустой строки по Enter. (Способ завершения ввода на практике оказывается не менее важен чем само его осуществление). Наши короткие примеры в качестве результата производят эхо-повтор введенной строки (устраняя, где надо хвостовой символ перевода строки!) … а ваш код, соответственно, будет передавать их куда-то на осмысленную обработку.
Вложения
inout.tgz
(1.51 КБ) 6 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: обработка текстовой информации

Непрочитанное сообщение Olej » 23 фев 2024, 06:43

Olej писал(а):
18 янв 2024, 17:13
Мешают ещё всякие знаки препинания.
Забыл совсем...
Доделал и забыл написать :oops:
Вот: полный палиндром:

Код: Выделить всё

package main
import (
        "fmt"
        "bufio"
        "log"
        "os"
        "strings"
        "regexp"
)

var nonAlphaNum = regexp.MustCompile(`[^a-zа-я0-9 ]+`)

func test(scanner *bufio.Scanner) {
    for scanner.Scan() {
	ustr := scanner.Text() // введенная строка
	s1 := strings.ReplaceAll(strings.ToLower(ustr), " ", "")
	s1 = strings.ReplaceAll(s1, "ё", "е")
	s1 = strings.ReplaceAll(s1, "й", "и")	
	rstr := []rune(nonAlphaNum.ReplaceAllString(s1, ""))
	pali := true;
	for i := 0; i < len(rstr) / 2; i++ {
	    if pali = rstr[i] == rstr[len(rstr) - i - 1]; !pali {
		break
	    }
	}
	fmt.Printf( "%v : %s\n", pali, ustr)
    }
}

func main() {
    if len(os.Args) > 1 {
	file, err := os.Open(os.Args[1])
	if err != nil {
	    log.Fatal(err)
	}
	defer file.Close()
	test(bufio.NewScanner(file))
    } else {
	test(bufio.NewScanner(os.Stdin))
    }
}
Прогон ... со знаками препинания, апострофами ... и даже с греческими амляутами всякими :lol: :

Код: Выделить всё

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/strings/palindrom$ go run palindrom.go palindrom.txt
true : А роза упала на лапу Азора
true : Я иду с мечем судия
true : На в лоб, болван
true : Лев осовел
true : Да, гневен гад
true : Мат и тут и там
true : Лев с ума ламу свёл
true : Кирилл лирик
true : Уж редко рукою окурок держу
true : Коту скоро сорок суток
true : А муза рада музе без ума да разума.
true : Веер веял для евреев
true : Madam, I’m Adam
true : Муха! О, муха! Велика аки лев! Ах, ум! О ах, ум!
true : Sum summus mus
true : Νίψον ανομήματα μη μόναν όψιν
true : Sator Arepo tenet opera rotas
true : Уверена я, а не реву
Вложения
palindrom.go
(886 байт) 5 скачиваний
palindrom.txt
(672 байт) 5 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: обработка текстовой информации

Непрочитанное сообщение Olej » 23 фев 2024, 06:54

Olej писал(а):
23 фев 2024, 06:43
Забыл совсем...
Olej писал(а):
23 фев 2024, 06:43
Вот: полный палиндром:
А чего вспомнил :?: ... :oops:
Сегодня у нас будет:

Код: Выделить всё

olej@R420:~$ date
Пт 23 фев 2024 05:44:25 EET
... даже вчера ещё вспомнил :-o ... да ночь была уже ...
Вот ещё один у нас ... палиндром :roll: :

Код: Выделить всё

olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples/strings/palindrom$ go run palindrom.go 
22.02.2022
true : 22.02.2022
^D
22.02.2022 - дата когда началась война...
В ночь на 21.02.2022 был подписан Договор о признании ДНР и ЛНР, о взаимопомощи и сотрудничестве...
22.02.2022 - Договор был опубликован ... и кто понимает - должен был понять...
В ночь на 24.02.2022 - началась СВО. :-o
И ещё было пророчество Ванги ... из последних, не заметили :oops: : "... ещё не наступила дата где 6 двоек..." :-o
22.02.2022 - палиндром ... до которого было "до", и с которого началось "после"... :roll:
Широко простирает химия руки свои в дела человеческие.
© М.В.Ломоносов.
Широко простирает палиндром руки свои в дела человеческие.

© Olej
:lol:

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей