Advertisement
OVDEN

chatgpt script

Mar 26th, 2023
1,199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 6.51 KB | Software | 0 0
  1. func parsOrigin() {
  2.     inputDir := "./input"      // директория, содержащая входные файлы
  3.     outputDir := "./output"    // базовая директория для сохранения файлов с сегментами
  4.     outputFile := "output.txt" // имя файла, в который будут сохранены найденные блоки
  5.  
  6.     // очистка директории outputDir
  7.     if err := os.RemoveAll(outputDir); err != nil {
  8.         panic(fmt.Sprintf("Не удалось очистить директорию %s: %s", outputDir, err))
  9.     }
  10.  
  11.     // создание директории outputDir, если ее еще не существует
  12.     if _, err := os.Stat(outputDir); os.IsNotExist(err) {
  13.         os.Mkdir(outputDir, os.ModePerm)
  14.     }
  15.  
  16.     // получение списка файлов в директории input
  17.     files, err := ioutil.ReadDir(inputDir)
  18.     if err != nil {
  19.         panic(fmt.Sprintf("Не удалось получить список файлов в директории %s: %s", inputDir, err))
  20.     }
  21.  
  22.     // создание директорий output с тем же названием, что и входные файлы
  23.     for _, file := range files {
  24.         inputFilename := filepath.Join(inputDir, file.Name())
  25.         outputFilename := filepath.Join(outputDir, file.Name())
  26.  
  27.         // создание директории output, если ее еще не существует
  28.         if _, err := os.Stat(outputFilename); os.IsNotExist(err) {
  29.             os.Mkdir(outputFilename, os.ModePerm)
  30.         }
  31.  
  32.         // открытие входного файла для чтения
  33.         inputFileHandle, err := os.Open(filepath.Join(inputFilename))
  34.         if err != nil {
  35.             panic(fmt.Sprintf("Не удалось открыть файл %s: %s", inputFileHandle.Name(), err))
  36.         }
  37.         defer inputFileHandle.Close()
  38.  
  39.         // открытие выходного файла для записи
  40.         outputFileHandle, err := os.Create(filepath.Join(outputFilename, outputFile))
  41.         if err != nil {
  42.             panic(fmt.Sprintf("Не удалось создать файл %s: %s", outputFile, err))
  43.         }
  44.         defer outputFileHandle.Close()
  45.  
  46.         // создание файлов сегментов
  47.         for i := 1; i <= 6; i++ {
  48.             segmentFilename := fmt.Sprintf("%s/segment%d.txt", outputFilename, i)
  49.             segmentFileHandle, err := os.Create(segmentFilename)
  50.             if err != nil {
  51.                 panic(fmt.Sprintf("Не удалось создать файл %s: %s", segmentFilename, err))
  52.             }
  53.             segmentFileHandle.Close()
  54.         }
  55.  
  56.         scanner := bufio.NewScanner(inputFileHandle)
  57.  
  58.         // флаги для определения начала и конца блока
  59.         blockStart := false
  60.         blockEnd := false
  61.  
  62.         lines := []string{}
  63.  
  64.         // строка для сохранения текущего блока
  65.         num := 0
  66.         for scanner.Scan() {
  67.             line := scanner.Text()
  68.             // убираем пробелы в начале
  69.             line = strings.TrimLeft(line, " ")
  70.             if strings.Contains(line, "Ϟ") && !strings.HasPrefix(line, "Ϟ") {
  71.                 for i, value := range strings.Split(line, "Ϟ") {
  72.                     if i == 0 {
  73.                         lines = append(lines, value)
  74.                     } else {
  75.                         lines = append(lines, "Ϟ"+value)
  76.                     }
  77.  
  78.                 }
  79.             } else {
  80.                 lines = append(lines, line)
  81.             }
  82.  
  83.         }
  84.  
  85.         var block string
  86.  
  87.         num = 0
  88.         for _, line := range lines {
  89.             if strings.Count(line, "\"")%2 != 0 && num == 0 {
  90.                 if strings.Count(line, `"`)%2 != 0 {
  91.                     line = strings.ReplaceAll(line, `\"`, "@")
  92.                 }
  93.                 num++
  94.             } else if num >= 1 && num < 5 {
  95.                 line = strings.ReplaceAll(line, `\"`, "@")
  96.                 line = strings.ReplaceAll(line, `"`, "@")
  97.                 line = strings.ReplaceAll(line, `”`, "@")
  98.                 num++
  99.             } else if num == 5 {
  100.                 line = strings.ReplaceAll(line, `«`, "@")
  101.                 line = strings.ReplaceAll(line, `»`, "@")
  102.                 num = 0
  103.             }
  104.  
  105.             // проверка начала блока
  106.             if !blockStart && strings.Contains(line, "\"") {
  107.                 var cSml = strings.Count(line, "\"")
  108.  
  109.                 if cSml != 1 {
  110.                     blockStart = false
  111.                     blockEnd = true
  112.                     block = line
  113.                 } else {
  114.                     blockStart = true
  115.                     blockEnd = false
  116.                     block = line
  117.                 }
  118.             } else if blockStart {
  119.                 // добавление строки в блок
  120.                 block += " " + line
  121.                 // проверка конца блока
  122.                 if strings.Contains(line, "\"") {
  123.                     blockStart = false
  124.                     blockEnd = true
  125.                 }
  126.             }
  127.  
  128.             // сохранение блока в файлы сегментов и в итоговый файл
  129.             if blockEnd && strings.Contains(block, "Ϟ") {
  130.                 index := strings.Index(block, "\"")
  131.                 name := ""
  132.                 if index != 0 {
  133.                     name = block[:strings.Index(block, "\"")-1]
  134.                     block = block[strings.Index(block, "\"")+1 : strings.LastIndex(block, "\"")]
  135.                 }
  136.  
  137.                 block = strings.ReplaceAll(block, "\"", "")
  138.  
  139.                 block = strings.ReplaceAll(block, "\n", " ")
  140.                 block = strings.ReplaceAll(block, "Ϟ", "\n")
  141.                 block = strings.ReplaceAll(block, "{w}", "[i]")
  142.                 block = strings.TrimSpace(block)
  143.  
  144.                 // запись сегментов в файлы
  145.                 segments := strings.Split(block, "\n")
  146.  
  147.                 finalBlock := ""
  148.                 for i, segment := range segments {
  149.                     segmentFilename := fmt.Sprintf("%s/segment%d.txt", outputFilename, i+1)
  150.                     segmentFileHandle, err := os.OpenFile(segmentFilename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
  151.                     if err != nil {
  152.                         panic(fmt.Sprintf("Не удалось открыть файл %s: %s", segmentFilename, err))
  153.                     }
  154.                     defer segmentFileHandle.Close()
  155.  
  156.                     segment = strings.ReplaceAll(segment, "@", `\"`)
  157.                     if len(name) != 0 {
  158.                         segment = name + ": " + segment
  159.                         segment = strings.ReplaceAll(segment, "Ϟ", "")
  160.                     }
  161.                     finalBlock += segment + "\n"
  162.                     if _, err := segmentFileHandle.WriteString(segment); err != nil {
  163.                         panic(fmt.Sprintf("Не удалось записать файл %s: %s", segmentFilename, err))
  164.                     }
  165.                     if _, err := segmentFileHandle.WriteString("\n\n"); err != nil {
  166.                         panic(fmt.Sprintf("Не удалось записать файл %s: %s", segmentFilename, err))
  167.                     }
  168.                 }
  169.  
  170.                 // запись блока в итоговый файл
  171.                 if _, err := outputFileHandle.WriteString(finalBlock); err != nil {
  172.                     panic(fmt.Sprintf("Не удалось записать файл %s: %s", outputFile, err))
  173.                 }
  174.                 if _, err := outputFileHandle.WriteString("\n"); err != nil {
  175.                     panic(fmt.Sprintf("Не удалось записать файл %s: %s", outputFile, err))
  176.                 }
  177.                 blockEnd = false
  178.             }
  179.         }
  180.  
  181.         if err := scanner.Err(); err != nil {
  182.             panic(err)
  183.         }
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement