@sergey_k said in Помогите с кодировкой.:
Текст берётся из файла. С англ буквами нет проблем, а вместо русских ромбики появляются. В какой кодировке должен быть текст?? Работаю в паралеллли из под макос.
utf-8
@Fox Спасибо. Пробовал так, но я же не знаю сколько "байт" будет. Можно было бы брать и 1 (допустим певую) строку, но их длина отличается. Т.е. если в файле есть список например:
00cats_ru
00ekb
00element00
00far.cry3
00g_o_d_l_i_k_e00
00ham1
00id17009256686
00karandash00
00l0l
00ladynatali777
00luxury00
00margo00
00mdk
то я не могу указать конкретное число "Последний байт", т.к. у каждой строки разное кол-во.
Попробовал брать регуляркой
^.*$
берёт то что надо, но вот вопрос как теперь удалить эту строку из "FILE_CONTENT" ?
Оно ведь не кладёт каждую строку в массив, а всё в 1 переменную
FILE_CONTENT: "00g_o_d_l_i_k_e00
00margo00
00o00o0o0o00o00
00princess
00rub
00rules
00thenewworld00
00xam..."
@lirik может проще будет разбить этот большой файл, на более мелкие по n количество строк, например с помощью KeyWordKeeper , и задать маску имени файла 1.txt, 2.txt и.т.д. И в цикле for потом пробегаемся по каждому файлику.
for 1 до n:
применяем действие Читать файл или Читать файл в список
указав в качестве пути C:/path/[[CYCLE_INDEX]].txt
Скачать KeyWordKeeper : http://www.rusdocs.com/razrezat-tekstovyj-fajl-txt-na-chasti-ili-po-strokam
@santilo На самом деле так и делаю :) Но это жеж не феншуй совсем :(
Наверняка должен быть способ сделать без "лишних манипуляций"
Короче вот такое решение получается:
@lirik сейчас можно сделать так, сложновато правда. Нужно в цикле читать по байтно файл до символа перевода строки, как только его встретили - собирать в строку. Правда не знаю, возможно в стандартном действии этот файл автоматически заменяется, то есть посмотреть на него нельзя будет, но нужно тестировать.
Как вариант - перенесите Ваш список в базу, тогда нагрузка точно упадет.
Варик с базой норм., но есть проблемка :( Этот файл заполняет другой проект. Т.е.
Проект 1 (парсер) заполняет файл baza.txt
Проект 2 (обработчик) берёт строку из файла baza.txt и "мандражирует" с ней :)
И всё это онлайн.
Проект 1 (парсер) заполняет файл baza.txt не построчно, а сразу неск. значений (массив) 5-10 - т.е. заливать в базу построчно "Вставить Запись" тоже не очень
@DrPrime а подскажи ПЛЗ как удалить пустую строку? Наверняка знаешь :) Что-то типо trim() или ещё как-то
FILE_CONTENT: "
00o00o0o0o00o00
00princess
00rub
00rules
00thenewworld00
00xam..."
@lirik Если так принципиально именно разбить, то можно с помощью командной строки..
Запустить процесс
setlocal enabledelayedexpansion
set q=0
set N=100
for /F "delims= " %%i in (file.txt) do (
set /a q+=1
if !q! GTR !N! set /a N+=100
@echo %%i >> file!N!.txt
)
file.txt имя файла
цифра 100 это количество строк на которое разбивать файл (меняется в двух местах).
@darmaed27 said in Работа с большими списками (файлами):
@Fox Как удалить пробелы в конце каждой строки в разбитых файлах?
Безопаснее использовать вариант через findstr. Вот вариант без дополнительных пробелов в каждой строке и без дополнительного переноса строки в конце каждого файла:
@echo off
set "$file=file.txt"
set $n=100
set $format=4
for /f %%i in ('
set /a $format-1
') do (
for /l %%j in (1 1 %%i) do (
call set zeros=0%%zeros%%
)
)
for /f "delims=" %%j in ('
findstr /n "^" "%$file%"
') do (
for /f "delims=:" %%i in ("%%j") do (
call :sub %%i "%%j"
)
)
exit
:sub
set /a $m=(%1-1)/%$n%+1
set $m=%zeros%%$m%
call set $m=%%$m:~-%$format%%%
set "$string=%~2"
for %%i in ("%$file%") do (
if not "%$i%"=="%$m%" (
type nul>"%%~ni%$m%%%~xi"
)
set /a count+=1
(
for /f %%j in ('
call echo %%count%%
') do (
if not %%j==%$n% (
(
for /f "delims=" %%k in ("%$string:*:=%") do (
echo.%%k
)
)|| (
echo.
)
) else (
(
for /f "delims=" %%k in ("%$string:*:=%") do (
set /p=%%k<nul
set count=
)
)|| (
echo.
set count=
)
)
)
)>>"%%~ni%$m%%%~xi"
)
set $i=%$m%
exit /b
Переменные:
$file - название файла
$n - количество строк в одном файле
$format - формат нумерации файлов (4 означает четырёхзначное число, file0001, file0002 и т.д)
@darmaed27 said in Работа с большими списками (файлами):
@Fox Разбиваю объекты json с переносом строк на файлы. Строка объекта рушится, если в нем есть символ "!". Как это можно пофиксить?
Для json подойдёт и такой код:
@echo off
set "$file=file.txt"
set $n=2
for /f "tokens=1* delims=[]" %%i in ('find /v /n "" ^<%$file%') do set "$j=%%j"& call :sub %%i
exit
:sub
set /a $m=(%~1-1)/%$n%+1
set $m=0%$m%
set $m=%$m:~-2%
if not "%$i%"=="%$m%" type nul >%$file%%$m%.txt
>>%$file%%$m%.txt echo.%$j%
set $i=%$m%& exit /b
Переменные те же, пробелов в конце строк не будет. Единственный минус, это стёртые квадратные скобки в начале строки:
из
[[[[[[[[[[[[]]1[][][][][]][[[]
[2"!@!@#!@%^$&%*
в
1[][][][][]][[[]
2"!@!@#!@%^$&%*