Чтобы прочитать файл ...
set /P Variable=<File.txt
Чтобы записать файл
@echo %DataToWrite%>File.txt
note; с пробелами перед символом & lt;> вызывает добавление пробела в конце переменной, также
Чтобы добавить в файл, например, программу регистрации, сначала создайте файл с одним ключом ввода в он называется e.txt
set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt
, ваш журнал будет выглядеть следующим образом:
Entry1
Entry2
и т. д.
В любом случае пара полезных вещей
Даже у самых опытных программистов есть проблемы с неявным преобразованием в логическое значение. Я, например, ценю эту маленькую особенность.
Для ясности. Это делает следующую ошибку просто недопустимой:
int x = ...;
if (x = 0) // in C: assign 0 to x and always evaluate to false
.... // never executed
Примечание: большинство современных компиляторов C / C ++ выдают предупреждение (но не ошибку) в отношении этого простого шаблона, но существует множество возможных вариантов. Это может подкрасться к вам.
Может быть, они чувствовали, что более явная формулировка больше соответствует строго типизированному языку.
И Java, и C # отказались от неявных преобразований в логические значения , чтобы снизить вероятность ошибки программиста .
Например, многие программисты случайно напишут:
if( x = 5 ) { ... }
вместо:
if( x == 5 ) { ... }
Что, конечно, приводит к совершенно иному поведению, поскольку первый оператор выполняет присваивание (которое всегда приводит к истине), а второй выполняет сравнение. В прошлом разработчики иногда писали такие присваивания в обратном порядке, чтобы избежать ловушки, поскольку:
if( 5 = x ) { ... } // doesn't compile.
Теперь в C # вы все еще можете создавать операторы неявного преобразования в bool
для своих собственных типов - хотя это редко рекомендуется, поскольку большинство разработчиков этого не ожидают:
public class MyValue
{
public int Value { get; set; }
public static implicit operator bool( MyValue mb )
{
return mb.Value != 0;
}
}
MyValue x = new MyValue() { Value = 10; }
if( x ) { ... } // perfectly legal, compiler applies implicit conversion
У вас все наоборот.
На самом деле C не поддерживает boolean
, поэтому if
(и любой другой условный оператор) на самом деле ожидает значение int
, а не boolean
. Тогда значение int, равное 0
, рассматривается как false, а любое другое значение - как true
.
Некоторые люди на самом деле находят это немного двусмысленным, потому что такое поведение может привести к множеству ошибок, как отмечали другие. Из-за этого разработчики Java отказались от поддержки только булевых
типов в операторах условия. И когда Microsoft решила реализовать MS-Java (AKA C#), они позаимствовали этот принцип проектирования.
Если вам это не нравится, вы можете программировать на различных языках, которые не имеют этого ограничения.
Некоторые языки программирования вообще не делают автоматического принуждения. Целое число, например, можно сравнивать только с другим целым числом; присваивание нецелочисленной переменной приводит к ошибке. Это отличительная черта языка с сильной типизацией.
То, что Java делает любое принуждение, является удобством для вас и нарушает модель сильной типизации.
Отображение всего диапазона целых чисел - или еще большего диапазона плавающих чисел - на два булевых значения чревато разногласиями по поводу произвольного присвоения "истинности" и "ложности".
Когда вы пытаетесь автоматически преобразовать двойное число в целое, Java отмечает это как ошибку "потери точности". По аналогии, преобразование числа в булево число также должно приводить к потере точности. Однако Java предпочла не поддерживать это синтаксически.
Неявное преобразование любого значения int (например, (flags & 0x80)) в логическое значение подразумевает определенное языком отображение из значения int в логическое значение.C сделал это и вызвал огромное количество путаницы и много ошибок программиста. Нет веской причины, по которой нулевое значение int ВСЕГДА означает истину (или ложь), и существует множество веских причин, по которым вы можете оставить решение на усмотрение программиста. По этим причинам в большинстве современных языков отказались от неявного преобразования в логическое значение.
Если каждый раз, когда вы выполняете битовый тест, набираете семь дополнительных символов, это означает «безумие», возможно, вы ошиблись в профессии. Если вы выполняете битовые тесты в int очень часто, вы можете подумать о том, не проводите ли вы оптимизацию преждевременно для экономии памяти.