Выход:
ался выяснить, как реализовать то, что я первоначально думал, было бы простой программой. У меня есть текстовый файл с цитатами, разделенными символом «$»
Я хочу, чтобы программа анализировала файл цитат и случайным образом выбирала 3 кавычки для отображения и стандартного вывода.
В файле 1022 цитаты.
Когда я пытаюсь разбить файл, я получаю эту ошибку: отсутствует '
Я не могу понять, как назначить $ со строковым литералом, я продолжаю получать:
отсутствует '
Это пользовательский сканер:
onDollarSign := func(data []byte, atEOF bool) (advance int, token []byte, err error) {
for i := 0; i < len(data); i++ {
//if data[i] == "$" { # this is what I did originally
//if data[i:i+2] == "$" { # (mismatched types []byte and string)
//if data[i:i+2] == `$` { # throws (mismatched types []byte and string)
// below throws syntax error: unexpected $ AND missing '
if data[1:i+2] == '$' {
return i + 1, data[:i], nil
}
}
Строковый литерал работает нормально, если я использую только один$
.
По какой-то причинетолько 71 цитата загружены в секцию цитат. Я не уверен, как расширить. Разрешить хранить все 1022 цитаты в памяти.
Мне было очень трудно понять, как это сделать. вот что у меня сейчас
package main
import (
"bufio"
"fmt"
"log"
"math/rand"
"os"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // Try changing this number!
quote_file, err := os.Open("/Users/bryan/Dropbox/quotes_file.txt")
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(quote_file)
// define split function
onDollarSign := func(data []byte, atEOF bool) (advance int, token []byte, err error) {
for i := 0; i < len(data); i++ {
if data[i] == '$' {
return i + 1, data[:i], nil
}
}
fmt.Print(data)
return 0, data, bufio.ErrFinalToken
}
scanner.Split(onDollarSign)
var quotes []string
// I think this will scan the file and append all the parsed quotes into quotes
for scanner.Scan() {
quotes = append(quotes, scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading input:", err)
}
fmt.Print(len(quotes))
fmt.Println("quote 1:", quotes[rand.Intn(len(quotes))])
fmt.Println("quote 2:", quotes[rand.Intn(len(quotes))])
fmt.Println("quote 3:", quotes[rand.Intn(len(quotes))])
}