TextClassification, FileSplitterByLines, TextSplitterByLines
1. FileSplitterByLines
2. TextClassification
https://giga.chat/link/gcsfkQAOxg
Вот сейчас сработало PS D:\projects\vs02\2606\TextClassification\FileSplitterByLines\FileSplitterByLines\bin\debug\net10.0> .\FileSplitterByLines.exe Conversation_01.txt 5
Всего строк: 1757 Создан файл: Conversation_01.txt_part1.txt (строки 1-351)
Создан файл: Conversation_01.txt_part2.txt (строки 352-702)
Создан файл: Conversation_01.txt_part3.txt (строки 703-1053)
Создан файл: Conversation_01.txt_part4.txt (строки 1054-1404)
Создан файл: Conversation_01.txt_part5.txt (строки 1405-1757) Готово.
-----------------------------------------------------------------
3. Create Theme
D:\Projects\VS02\2606\TextClassification\Copilot\09-08-2026_04-42-18
Два варианта классификации Текста
Themes1.txt
Themes2.txt
-----------------------------------------------
Start App from Powershell
pwsh>.\FileSplitterByLines.exe Conversation_01.txt 10
D:\Projects\VS02\2606\TextClassification\FileSplitterByLines\FileSplitterByLines.slnx
D:\Projects\VS02\2606\TextClassification\FileSplitterByLines\FileSplitterByLines\FileSplitterByLines.csproj
D:\Projects\VS02\2606\TextClassification\FileSplitterByLines\FileSplitterByLines\Conversation_01.txt
PS D:\projects\vs02\2606\TextClassification\FileSplitterByLines\FileSplitterByLines\bin\debug\net10.0> .\FileSplitterByLines.exe Conversation_01.txt 10
Всего строк: 1757
Создан файл: Conversation_01.txt_part1.txt (строки 1-175)
Создан файл: Conversation_01.txt_part2.txt (строки 176-350)
Создан файл: Conversation_01.txt_part3.txt (строки 351-525)
Создан файл: Conversation_01.txt_part4.txt (строки 526-700)
Создан файл: Conversation_01.txt_part5.txt (строки 701-875)
Создан файл: Conversation_01.txt_part6.txt (строки 876-1050)
Создан файл: Conversation_01.txt_part7.txt (строки 1051-1225)
Создан файл: Conversation_01.txt_part8.txt (строки 1226-1400)
Создан файл: Conversation_01.txt_part9.txt (строки 1401-1575)
Создан файл: Conversation_01.txt_part10.txt (строки 1576-1757)
-------------------------------
TextClassification
-------------------------------
D:\Projects\VS02\2606\TextClassification\Copilot\09-08-2026_04-42-18
Два варианта классификации Текста
Themes1.txt
Themes2.txt
-------------------------------------------------------------
StartApp
https://giga.chat/link/gcsfkQAOxg
-------------------------------------------------------------
Файл на месте, он существует и имеет правильный размер. Ошибка CommandNotFoundException в PowerShell при наличии файла почти всегда означает одну из двух вещей:
- Проблема с рабочей директорией для входного файла. Программа ищет
Conversation_01.txtне в папкеnet10.0, а в корне дискаD:\. - Блокировка со стороны системы (SmartScreen или антивирус). Windows 10/11 часто блокирует запуск свежесобранных
.exeфайлов «от неизвестного издателя» до тех пор, пока вы не подтвердите доверие к ним.
Вот как это исправить по шагам:
Шаг 1. Проверьте наличие текстового файла
Убедитесь, что файл Conversation_01.txt лежит в той же папке: ...\bin\debug\net10.0. Если его там нет, положите его туда или укажите полный путь к нему.
Шаг 2. Попробуйте запустить через точку-слэш (явное указание пути)
В PowerShell текущая директория обозначается точкой (.). Это самый надежный способ обойти возможные настройки политик выполнения:
.\FileSplitterByLines.exe Conversation_01.txt 5Если программа запустится, значит, проблема была именно в том, как PowerShell разрешает имена команд.
Шаг 3. Запустите от имени администратора (если Шаг 2 не помог)
- Закройте окно терминала.
- Нажмите кнопку «Пуск», введите
PowerShell. - В найденном приложении нажмите правой кнопкой мыши → «Запуск от имени администратора».
- Снова перейдите в вашу папку командой
cdи попробуйте выполнить.\FileSplitterByLines.exe...
Шаг 4. Разрешите выполнение в SmartScreen Если после запуска появилось синее окно «Система Windows защитила ваш компьютер» или ошибка о нарушении прав доступа:
- Перейдите в папку
...\bin\debug\net10.0через обычный Проводник. - Щелкните правой кнопкой мыши по
FileSplitterByLines.exe→ «Свойства». - На вкладке «Общие» внизу поставьте галочку «Разблокировать», если она там есть, и нажмите ОК.
- Либо прямо в этом окне нажмите «Выполнить в любом случае».
Шаг 5. Проверьте журнал событий Windows Если консоль открывается и тут же закрывается с ошибкой, которую вы не успеваете прочитать:
- Нажмите
Win + R, введитеeventvwr.mscи нажмите Enter. - Перейдите в «Журналы Windows» -> «Приложение».
- Ищите последнюю ошибку (Error) от источника
.NET RuntimeилиWindows Error Reporting. Текст ошибки подскажет, чего не хватает программе (например, нативных библиотек).
Шаг 6. Проверка зависимостей .NET Так как у вас проект на .NET 10.0 (предположительно превью-версия), убедитесь, что соответствующий SDK установлен корректно. Иногда помогает принудительная очистка временных артефактов сборки:
dotnet clean
dotnet build --configuration DebugСкорее всего, вам поможет комбинация Шага 2 (запуск через .\) и Шага 3 (разблокировка файла в свойствах).
Вот сейчас сработало PS D:\projects\vs02\2606\TextClassification\FileSplitterByLines\FileSplitterByLines\bin\debug\net10.0> .\FileSplitterByLines.exe Conversation_01.txt 5 Всего строк: 1757 Создан файл: Conversation_01.txt_part1.txt (строки 1-351) Создан файл: Conversation_01.txt_part2.txt (строки 352-702) Создан файл: Conversation_01.txt_part3.txt (строки 703-1053) Создан файл: Conversation_01.txt_part4.txt (строки 1054-1404) Создан файл: Conversation_01.txt_part5.txt (строки 1405-1757) Готово.
Почему это не работало ?
Это сработало, потому что вы использовали явное указание пути (.\).
В PowerShell (как и в современных версиях Windows по умолчанию) действуют строгие правила безопасности. Вот почему ваша первая команда FileSplitterByLines.exe ... не работала:
- Приоритет папок из переменной PATH. Когда вы вводите просто имя файла без пути, оболочка ищет его только в системных директориях (указанных в переменной среды
PATH), например,C:\Windows\System32. Она принципиально не ищет исполняемые файлы в текущей рабочей папке, чтобы защитить систему от случайного запуска вредоносных программ (троянов), которые могут лежать в скачанном архиве. - **Оператор
.\как явное согласие.** Точка означает «текущая директория». Записывая.\ИмяФайла, вы буквально говорите системе: «Я нахожусь именно здесь, я знаю, что делаю, и даю прямое разрешение запустить этот конкретный файл из этой конкретной папки». Это снимает ограничение безопасности.
Кстати, это стандарт поведения для всех Unix-подобных систем (Linux, macOS), где терминал также никогда не ищет программы в текущей папке по умолчанию — там всегда пишут ./script.sh.
Почему программа создала 5 файлов ровно по 351 строке?
Ваш алгоритм работает абсолютно корректно с точки зрения целочисленного деления:
- Всего строк: 1757
- Количество частей: 5
- Расчет базовой части: (целая часть)
- Остаток:
Логика вашего цикла распределяет строки так:
- Первые четыре файла получают строго по 351 строке ().
- Последний (пятый) файл забирает все оставшиеся строки вместе с остатком: строки (с 1405-й по 1757-ю включительно).
Если бы вам нужно было распределить остаток более равномерно (например, сделать первые два файла чуть длиннее), логику пришлось бы усложнять, вычисляя границы через умножение индекса на (totalLines + parts - 1) / parts (метод округления вверх при делении). Но для простого разрезания текстового дампа ваш текущий вариант идеален.
Как запускать программу проще
Чтобы больше не писать каждый раз .\, у вас есть три варианта:
- Добавить точку в список разрешенных путей (только для продвинутых пользователей).
Можно выполнить команду
$env:Path += ";.", но Microsoft настоятельно не рекомендует добавлять текущую директорию в глобальную переменнуюPATHиз соображений безопасности. - Использовать классический CMD вместо PowerShell.
Откройте обычную командную строку (
cmd.exe). В ней рабочая папка имеет приоритет, и командаFileSplitterByLines.exe Conversation_01.txt 5сработает сразу без всяких префиксов. - Настроить параметры запуска в Visual Studio. Как уже обсуждалось ранее, если вы зайдете в свойства проекта -> вкладка «Отладка» и пропишете аргументы там, то сможете запускать приложение одной кнопкой F5 прямо из IDE, вообще не заходя в терминалы.
Комментариев нет:
Отправить комментарий