Показать полную графическую версию : Необходимо прочитать и сериализовать текстовый файл в переменную
Здравствуйте, ищу помощи в с следующей задачей:
Есть текстовый файл с строками:
зайка
котик
ослик
тигрёнок
бабочка
Пытаюсь преобразовать его в json и поместить в переменную.
Искомый результат:
зайка\nкотик\nослик\n\nтигрёнок\n\nбабочка
То есть надо прочитать текстовик построчно и добавить в конец строки \n и результат дописать в конец самой переменной.
На данный момент есть следующий код SETLOCAL EnableDelayedExpansion
for /f "delims=" %%x in (commx.txt) do (
set _var=!_var!\n%%x
)
echo %_var%
Но он пропускает пустые строки а они важны.
И ещё вопрос. Мой файл на 65000 символов.
CMD такие переменные точно не поддерживает.
А новый Windows terminal потянет?
Спасибо.
param(
$path="C:\qwe.txt"
)cls
$result=(gc $path -raw).Replace("`r`n",'\n')
$result
Foreigner
17-06-2020, 18:23
Fors1k, а зачем ты пишешь cls после блока param? Не могу этого понять, зачем?
до161731
после:161732
cls обеспечивает чистоту и свежий запах в консоли после выполнения кода :)
$result »
С пошиком проблема в том что МС накрутила ограничений на скрипты очень много.
Пока запустишь - уже не надо.
А так конечно спасибо. У меня локально работает.
Правда на большом файле (65к) ещё не проверял.
SetLocal EnableDelayedExpansion
for /f "delims=" %%I in ('findstr /n "^" "foo.txt"') do (
set _TempVar_01=%%I
set _TempVar_02=!_TempVar_01:~2!\n
set _ResultVar_01=!_ResultVar_01!!_TempVar_02!
)
echo !_ResultVar_01!
Foreigner
17-06-2020, 18:52
cls обеспечивает чистоту и свежий запах в консоли после выполнения кода »
Понятно, просто для читаемости.
С CMD у меня не получается.
Кто-то знает что именно надо дописать что бы ПоШ из батника заработал?
powershell (gc .\foo.txt -raw).Replace("`r`n",'\n')
Ругается:
At line:1 char:29
+ (gc .\foo.txt -raw).Replace(`r`n,'\n')
+ ~
Missing ')' in method call.
At line:1 char:29
+ (gc .\foo.txt -raw).Replace(`r`n,'\n')
+ ~~~~
Unexpected token '`r`n' in expression or statement.
At line:1 char:33
+ (gc .\foo.txt -raw).Replace(`r`n,'\n')
+ ~
Missing argument in parameter list.
At line:1 char:38
+ (gc .\foo.txt -raw).Replace(`r`n,'\n')
+ ~
Unexpected token ')' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInMethodCall
ateka, ему не надо «работать из батника».
Foreigner
17-06-2020, 20:51
Replace("`r`n",'\n') »
Это так не работает. В строке нет последвательности символов "`r`n"
Не путайте Replace-метод и replace-оператор, первый меняет строку на строку, а второй ищет regex-паттерн и меняет на строку:
PS > 'aaa'.Replace('a','b')
bbb
PS > 'aaa' -replace 'a{2}','b'
ba
Аналогично со split.
С CMD у меня не получается. »Microsoft считает использование cmd - атавизмом.
Разработка cmd.exe была фактически остановлена после выхода Windows 2000.В качестве основной командной оболочки рассматривается PowerShell. (https://ru.wikipedia.org/wiki/Cmd.exe)
PowerShell заменяет командную строку (https://support.microsoft.com/ru-ru/help/4027690/windows-powershell-is-replacing-command-prompt)(за ссылку спасибо YuS_2)
Это так не работает. В строке нет последвательности символов "`r`n" »
Прекрасно все работает, и последовательность символов "`r`n" очень даже есть. Вы код пробовали запустить?)
А у ateka код не запустился потому, что потерял кавычки.
С пошиком проблема в том что МС накрутила ограничений на скрипты очень много. »что бы ПоШ из батника заработал? »
Вбейте в яндекс "как запускать ps скрипты", и в первой-второй ссылке будет нужная информация. У меня проблем нет никаких :)
Foreigner
17-06-2020, 21:34
Прекрасно все работает »
Что там работает? Пустое выражение -- нет вхождения, нет замены. Иначе вместо каждого перевода строки было бы два символа '\' и 'n' Пример замены:
> $a =
: @"
: a
: a
: a
: "@
> $a -replace "\n\r", "\n"
a
a
a
> $a -replace "\n", "\n"
a\na\na
Что там работает? »
Я еще раз предлагаю вам запустить мой код, а не свой. А уже после скажете, работает мой код, или нет.
Foreigner
17-06-2020, 22:14
Я еще раз предлагаю вам запустить мой код, а не свой. А уже после скажете, работает мой код, или нет. »
Почему тогда "`r`n" не меняются на строку "\" + "n"? Ведь так должно быть? Или как? Ну попробуйте в вашем примере другую замену, и вы увидите, как это работает. Замените любой другой символ на "\n".
Дяденьки, пачиму не раскрывается переменная?
$result=(Get-Content .\foo.txt -raw).Replace("`r`n",'\n')
Invoke-RestMethod `
-Body '{"body": "$result"}'
Foreigner
17-06-2020, 22:26
Я еще раз предлагаю вам запустить мой код, а не свой. »
Сорри, что-то я тупанул, все нормально, строка меняется на строку, бывает. Извиняйте, ввели в заблуждение "`n`r" и "\n".
Foreigner, ничего, бывает)
megaloman
18-06-2020, 08:19
Мой файл на 65000 символов. »В рамках чистого CMD Ваша задача решения не имеет -Ограничение командной строки . (https://support.microsoft.com/ru-ru/help/830473/command-prompt-cmd-exe-command-line-string-limitation)@Echo OFF
cls
Set "FileIn=Z:\Box_In\test.txt"
Set "Var="
FOR /F "usebackq tokens=1* delims=:" %%i IN (`FINDSTR /N /R /C:".*" "%FileIn%"`) DO Call Set "Var=%%Var%%%%j\n"
Echo "%Var%"
Pause
Exit /B
В чём задача? Зачем такая переменная, что Вы с ней будете делать? Конечный результат - текстовый файл? И чтобы всё остальное - CMD? В такой постановке можно попробовать комбинацию CMD+PowerShell или @set @E=1; /*
@Echo Off
cls
Set "FileIn=Z:\Box_In\test.txt"
Set "FileOut=Z:\Box_Out\testOut.txt"
2>nul del "%FileOut%"
Cscript //NoLogo /E:jscript "%~dpnx0" "%FileIn:\=\\%" "%FileOut:\=\\%"
More "%FileOut%"
pause
GoTo :Eof
*/
var oArg = WScript.Arguments;
if (oArg.Count()<2) WScript.Quit(1);
var FileIn = oArg(0);
var FileOut = oArg(1);
var FSO = WScript.CreateObject('Scripting.FileSystemObject');
var F = FSO.OpenTextFile(FileIn, 1);
var s = F.ReadAll();
F.Close();
F = FSO.CreateTextFile(FileOut, true);
F.Write(s.replace(new RegExp(String.fromCharCode(13,10), 'g'),"\\n"));
F.Close();С файлом в 1Мб расправляется мигом.
delims=: »
Спасибо. Я не подумал поставить : делимом и как дурак отрезал от переменной.
Будет мне наука.
В чём задача? Зачем такая переменная? »
Мне надо взять данные из текстового файла и через API в виде json-a переслать на сайт.
В итоге я взял кусок кода у Форсика, засел за гугл и набросал рабочий код на PoSh.
Надеюсь никому его показывать не придётся.
Ещё раз спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.