Урок №213. рандомный файловый ввод и вывод

Определение

Пространство имен:
System.IO
Сборки:
mscorlib.dll, System.IO.FileSystem.dll
Сборка:
System.IO.FileSystem.dll
Сборка:
System.Runtime.dll
Сборка:
mscorlib.dll
Сборка:
netstandard.dll

Важно!

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Предоставляет статические методы для создания, копирования, удаления, перемещения и открытия одного файла, а также помогает при создании объектов FileStream.

Время последнего чтения/изменения файла

Файлы хранят информацию о последнем времени их чтения/изменения. Чтобы получить эту информацию, мы будем использовать класс QFileInfo. В следующем примере мы выводим время последнего чтения и последнего изменения указанного файла:

#include <QTextStream>
#include <QFileInfo>
#include <QDateTime>
#include <conio.h>

int main(int argc, char *argv[]) {

QTextStream out(stdout);
out.setCodec(«cp-866»);

if (argc != 2) {
qWarning(«Usage: file_times file»);
return 1;
}

QString filename = argv;

// Создаем объект класса QFileInfo. В качестве параметра используем имя файла из аргумента командной строки
QFileInfo fileinfo(filename);

// Определяем дату и время последнего чтения файла
QDateTime last_rea = fileinfo.lastRead();

// Определяем дату и время последнего изменения файла
QDateTime last_mod = fileinfo.lastModified();

out << «Last read: » << last_rea.toString() << endl;
out << «Last modified: » << last_mod.toString() << endl;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

#include <QTextStream>
#include <QFileInfo>
#include <QDateTime>
#include <conio.h>
 

intmain(intargc,char*argv){

QTextStream out(stdout);

out.setCodec(«cp-866»);

if(argc!=2){

qWarning(«Usage: file_times file»);

return1;

}

QString filename=argv1;

// Создаем объект класса QFileInfo. В качестве параметра используем имя файла из аргумента командной строки

QFileInfo fileinfo(filename);

// Определяем дату и время последнего чтения файла

QDateTime last_rea=fileinfo.lastRead();

// Определяем дату и время последнего изменения файла

QDateTime last_mod=fileinfo.lastModified();

out<<«Last read: «<<last_rea.toString()<<endl;

out<<«Last modified: «<<last_mod.toString()<<endl;

}

Примечание: Для запуска программы см. пункт «Размер файла» (подпункты «Подготовка» и «Запуск программы»).

Результат выполнения программы:

Советы

Вот несколько советов по написанию собственных заголовочных файлов:

   Всегда используйте директивы препроцессора.

   Не определяйте переменные в заголовочных файлах, если это не константы. Заголовочные файлы следует использовать только для объявлений.

   Не определяйте функции в заголовочных файлах.

   Каждый заголовочный файл должен выполнять свое конкретное задание и быть как можно более независимым. Например, вы можете поместить все ваши объявления, связанные с файлом А.cpp в файл A.h, а все ваши объявления, связанные с B.cpp — в файл B.h. Таким образом, если вы будете работать только с А.cpp, то вам будет достаточно подключить только A.h и наоборот.

   Используйте имена ваших рабочих файлов в качестве имен для ваших заголовочных файлов (например, grades.h работает с grades.cpp).

   Не подключайте одни заголовочные файлы из других заголовочных файлов.

   Не подключайте файлы .cpp, используя директиву препроцессора #include.

Запись данных в файл

Для записи данных в файл, мы сначала открываем файл в режиме записи, затем создаем поток вывода, направленный в файл, и используем оператор для записи данных в этот поток. В примере, приведенном ниже, имена пяти дистрибутивов Linux записываются в файл :

#include <QTextStream>
#include <QFile>

int main() {

QTextStream out(stdout);

// Создаем объект класса QFile и связываем его с указанным именем файла
QString filename = «C:\\distros.txt»;
QFile file(filename);

// Открываем файл в режиме «Только для записи»
if (file.open(QIODevice::WriteOnly)) {
QTextStream out(&file); // поток записываемых данных направляем в файл

// Для записи данных в файл используем оператор <<
out << «Xubuntu» << endl;
out << «Arch» << endl;
out << «Debian» << endl;
out << «Redhat» << endl;
out << «Slackware» << endl;

} else {

qWarning(«Could not open file»);
}

// Закрываем файл
file.close();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#include <QTextStream>
#include <QFile>
 

intmain(){

QTextStream out(stdout);

// Создаем объект класса QFile и связываем его с указанным именем файла

QString filename=»C:\\distros.txt»;

QFile file(filename);

// Открываем файл в режиме «Только для записи»

if(file.open(QIODevice::WriteOnly)){

QTextStream out(&file);// поток записываемых данных направляем в файл

// Для записи данных в файл используем оператор <<

out<<«Xubuntu»<<endl;

out<<«Arch»<<endl;

out<<«Debian»<<endl;

out<<«Redhat»<<endl;

out<<«Slackware»<<endl;

}else{

qWarning(«Could not open file»);

}

// Закрываем файл

file.close();

}

В результате по заданному вами пути программа создаст файл со следующим содержимым:

4Синтаксис XPath

XPath использует выражения пути для выбора узлов или множества узлов в документе XML. Узел можно выбрать, следуя пути или по шагам. Мы будем использовать следующий XML-документ в приведённых ниже примерах.

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
        <title lang="en">Harry Potter</title>
        <price>29.99</price>
    </book>
    <book>
        <title lang="en">Learning XML</title>
        <price>39.95</price>
    </book>
</bookstore>

Выбор узлов

С помощью выражений XPath для выбора узлов в документе XML можно выбрать узел, следуя пути или шагам. Самые полезные выражения пути перечислены ниже:

Выражение Описание
имя_узла Выбирает все узлы с именем имя_узла
Выбирает от корневого узла
// Выбирает узлы в документе от текущего узла, который соответствует выбору, независимо от того, где они находятся
. Выбирает текущий узел
.. Выбирает родителя текущего узла
@ Выбирает атрибуты

В приведенной ниже таблице перечислены некоторые пути выражения и результат выполнения выражения:

Выражение XPath Результат
bookstore Выбирает все узлы с именем «bookstore»
/bookstore Выбирает корневой элемент книжного магазина

Примечание: Если путь начинается с косой черты (/), он всегда представляет собой абсолютный путь к элементу!

bookstore/book Выбирает все элементы «книга» (book), которые являются потомками элемента «книжный магазин» (bookstore)
//book Выбирает все элементы «книга» независимо от того, где они находятся в документе
bookstore//book Выбирает все элементы «книга», которые являются потомком элемента «книжный магазин», независимо от того, где они находятся под элементом «книжный магазин»
//@lang Выбирает все атрибуты, которые называются «lang»

Предикаты

Предикаты используются для поиска специфического узла или узла, который содержит специфическое значение. Предикаты всегда обрамляются квадратными скобками. В приведённой ниже таблице перечислены некоторые выражения пути с предикатами, и результат выражения:

Выражения XPath Результат
/bookstore/book Выбирает первый элемент «книга», который является потомком элемента «книжный магазин».

Примечание: В IE 5,6,7,8,9 первый узел имеет индекс , но в соответствии с рекомендациями W3C, это . Для решения этой проблемы в IE, задаётся опция «SelectionLanguage» для XPath:

На JavaScript: xml.setProperty(«SelectionLanguage», «XPath»);

/bookstore/book Выбирает последний элемент «книга» (book), который является дочерним элементом элемента «книжный магазин» (bookstore)
/bookstore/book Выбирает предпоследний элемент «книга», который является дочерним элементом элемента «книжный магазин»
/bookstore/book Выбор первых двух элементов «книга», которые являются потомками элемента «книжный магазин»
//title Выбирает все элементы «название» (title), которые имеют атрибут с именем «lang»
//title Выбирает все элементы «название», которые имеют атрибут «язык» со значением «en»
/bookstore/book Выбирает все элементы «книга» после элемента «книжный магазин», которые имеют элемент «цена» со значением больше, чем 35.00
/bookstore/book/title Выбирает все элементы «название» книги элемента «книжный магазин», которые имеют элемент «цена» со значением больше, чем 35.00

Выбор неизвестных узлов

Специальные символы XPath могут использоваться для выбора неизвестных XML узлов.

Wildcard Описание
* Соответствует любому узлу
@* Соответствует узлу-атрибуту
node() Соответствует любому узлу любого типа

В приведённой ниже таблице мы перечислили некоторые пути выражения и результаты выражений:

Выражение пути Результат
/bookstore/* Выбирает все дочерние узлы элемента «книжный магазин» (bookstore)
//* Выбирает все элементы в документе
//title Выбирает все элементы «название» (title), которые имеют по крайней мере один атрибут любого вида

Выбор нескольких путей

С помощью оператора | в выражениях XPath вы можете выбрать несколько путей. В таблице ниже перечислены несколько выражений путей и результаты их применения:

Выражение пути Результат
//book/title | //book/price Выбирает все элементы «название» (title) И «цена» (price) всех элементов «книга» (book)
//title | //price Выбирает все элементы «название» (title) И «цена» (price) в документе
/bookstore/book/title | //price Выбирает все элементы «название» элемента «книга» элемента «книжный магазин» И все элементы «цена» в документе

1Что такое XPath

  • XPath определяет синтаксис для определения частей документа XML;
  • XPath использует выражения пути для навигации по элементам XML-документов;
  • XPath содержит библиотеку стандартных функций;
  • XPath является одним из основных элементов в XSLT;
  • XPath является рекомендацией W3C.

Выражения XPath

XPath использует выражения пути для выбора отдельных узлов или набора узлов в документе XML. Эти выражения очень похожи на выражения, которые вы видите, когда работаете с традиционной файловой системой компьютера.

Стандартные функции XPath

XPath включает в себя более 100 встроенных функций. Есть функции для строковых и числовых значений, даты и времени, сравнения узлов и манипулирования QName, управления последовательностями, булевых значений, и многое другое.

XPath используется в XSLT

XPath является одним из основных элементов в стандарте XSLT. Без знания XPath вы не будете иметь возможность создавать XSLT-документы.

XPath является рекомендацией консорциума W3C

XPath стал рекомендацией W3C 16 ноября 1999 года. XPath был разработан для использования в XSLT, XPointer и другом программном обеспечении для разбора (парсинга) документов XML.

4 ответа

Лучший ответ

Другой подход без регулярного выражения. В обоих следующих примерах используется параметр снижения риска для целей отладки.

Переименовать файлы:

Переименовать и переместить файлы:

3

JosefZ
2 Апр 2017 в 02:56

Я знаю, что это не PowerShell. Если вы просто хотите, чтобы что-то работало, это командный файл cmd.

lit
2 Апр 2017 в 02:10

Вероятно, наиболее идиоматический способ решения этой проблемы заключается в следующем (предполагается, что все файлы, представляющие интерес — и никакие другие — находятся в текущем каталоге.):

Добавьте общий параметр в команду для предварительного просмотра операции переименования.

Обратите внимание, что всегда переименовывает элементы в их текущем местоположении; чтобы (также) переместить их, используйте. Если цель с таким именем уже существует, сообщает о непрекращающейся ошибке для каждого такого случая (без прерывания общей обработки)

Обратите внимание, что его также может произойти, если имя входного файла не содержит , так как это приведет к попытке переименовать файл для себя

Если цель с таким именем уже существует, сообщает о непрекращающейся ошибке для каждого такого случая (без прерывания общей обработки)

Обратите внимание, что его также может произойти, если имя входного файла не содержит , так как это приведет к попытке переименовать файл для себя

Объяснение :

выводит объекты, представляющие файлы в текущем каталоге, которые передаются по конвейеру () в

Передача блока скрипта () параметру выполняет содержащийся код для каждого входного объекта, где представляет входной объект под рукой.
Обратите внимание, что этот практически недокументированный, но часто используемый метод называется параметром блока сценария , где параметр, предназначенный для ввода данных в конвейер, может быть связан с блоком сценария, который обрабатывает ввод косвенным образом. извлекает 1-й — разделенный токен из базового имени каждого входного имени файла (имя файла без расширения)

, поскольку LHS является строкой, выполняет конкатенацию string . извлекает расширение имени файла из каждого входного имени файла.

2

mklement0
2 Апр 2017 в 03:12

Вы можете использовать {{X0} } оператор для выполнения этой операции со строками:

Регулярное выражение является уловкой здесь:

  1. означает соответствие серии цифр (1 или более цифр)
  2. означает совпадать с чем угодно
  3. означает совпадение с точкой, за которой следуют любые символы, кроме точки
  4. означает, что совпадение должно доходить до конца строки

Первая и третья особенность заключаются в том, что они заключены в круглые скобки, что означает, что вы можете использовать эти значения, используя долларовую нотацию (например, ) в строке замены.

2

Don Cruickshank
2 Апр 2017 в 02:01

Угловые скобки () vs. Двойные кавычки («»)

Вы, наверное, хотите узнать, почему используются угловые скобки для iostream и двойные кавычки для add.h. Дело в том, что, используя угловые скобки, мы сообщаем компилятору, что подключаемый заголовочный файл написан не нами (он является «системным», т.е. предоставляется Стандартной библиотекой С++), так что искать этот заголовочный файл следует в системных директориях. Двойные кавычки сообщают компилятору, что мы подключаем наш собственный заголовочный файл, который мы написали самостоятельно, поэтому искать его следует в текущей директории нашего проекта. Если файла там не окажется, то компилятор начнет проверять другие пути, в том числе и системные директории.

Правило: Используйте угловые скобки для подключения «системных» заголовочных файлов и двойные кавычки для ваших заголовочных файлов.

Стоит отметить, что одни заголовочные файлы могут подключать другие заголовочные файлы. Тем не менее, так делать не рекомендуется.

Путь к файлу

Файл идентифицируется по имени и по пути. Путь состоит из имени файла, базового имени и суффикса. В следующем примере мы используем несколько методов для вывода пути к файлу и его частей:

#include <QTextStream>
#include <QFileInfo>
#include <conio.h>

int main(int argc, char *argv[]) {

QTextStream out(stdout);
out.setCodec(«cp-866»);

if (argc != 2) {
out << «Usage: file_times file» << endl;
return 1;
}

QString filename = argv;

// Определяем путь к файлу
QFileInfo fileinfo(filename);

QString absPath = fileinfo.absoluteFilePath(); // возвращаем абсолютный путь, включающий имя файла
QString baseName = fileinfo.baseName(); // возвращаем базовое имя: имя файла без пути
QString compBaseName = fileinfo.completeBaseName(); // возвращаем полное базовое имя: все символы в имени файла до последней точки (но не включая её)
QString fileName = fileinfo.fileName(); // возвращаем имя файла, которое является базовым именем + расширение
QString suffix = fileinfo.suffix(); // возвращаем расширение файла, которое состоит из всех символов в базовом имени файла + расширение после последнего символа точки (но не включая её)
QString compSuffix = fileinfo.completeSuffix(); // возвращаем расширение файла, которое состоит из всех символов в базовом имени файла + расширение после первого символа точки (но не включая её)

out << «Absolute file path: » << absPath << endl;
out << «Base name: » << baseName << endl;
out << «Complete base name: » << compBaseName << endl;
out << «File name: » << fileName << endl;
out << «Suffix: » << suffix << endl;
out << «Whole suffix: » << compSuffix << endl;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

#include <QTextStream>
#include <QFileInfo>
#include <conio.h>
 

intmain(intargc,char*argv){

QTextStream out(stdout);

out.setCodec(«cp-866»);

if(argc!=2){

out<<«Usage: file_times file»<<endl;

return1;

}

QString filename=argv1;

// Определяем путь к файлу

QFileInfo fileinfo(filename);

QString absPath=fileinfo.absoluteFilePath();// возвращаем абсолютный путь, включающий имя файла

QString baseName=fileinfo.baseName();// возвращаем базовое имя: имя файла без пути

QString compBaseName=fileinfo.completeBaseName();// возвращаем полное базовое имя: все символы в имени файла до последней точки (но не включая её)

QString fileName=fileinfo.fileName();// возвращаем имя файла, которое является базовым именем + расширение

QString suffix=fileinfo.suffix();// возвращаем расширение файла, которое состоит из всех символов в базовом имени файла + расширение после последнего символа точки (но не включая её)

QString compSuffix=fileinfo.completeSuffix();// возвращаем расширение файла, которое состоит из всех символов в базовом имени файла + расширение после первого символа точки (но не включая её)

out<<«Absolute file path: «<<absPath<<endl;

out<<«Base name: «<<baseName<<endl;

out<<«Complete base name: «<<compBaseName<<endl;

out<<«File name: «<<fileName<<endl;

out<<«Suffix: «<<suffix<<endl;

out<<«Whole suffix: «<<compSuffix<<endl;

}

Примечание: Для запуска программы см. пункт «Размер файла» (подпункты «Подготовка» и «Запуск программы»).

Результат выполнения программы:

Одновременное чтение и запись в файл с помощью fstream

Класс (почти) способен одновременно читать содержимое файла и записывать данные в него! Нюанс заключается в том, что вы не можете произвольно переключаться между чтением и записью файла. Как только начнется чтение или запись файла, то единственным способом переключиться между чтением или записью будет выполнение операции, которая изменит текущее положение файлового указателя (например, поиск данных). Если вы не хотите перемещать файловый указатель (потому что он уже находится в нужном месте), то вы можете просто выполнить поиск текущих данных (на которые указывает файловый указатель):

// Предположим, что iofile является объектом класса fstream
iofile.seekg(iofile.tellg(), ios::beg); // перемещаемся к текущей позиции файлового указателя

1
2

// Предположим, что iofile является объектом класса fstream

iofile.seekg(iofile.tellg(),ios::beg);// перемещаемся к текущей позиции файлового указателя

Теперь давайте напишем программу, которая откроет файл, прочитает его содержимое и заменит все найденные гласные буквы на символ :

#include <iostream>
#include <fstream>
#include <cstdlib> // для использования функции exit()

int main()
{
using namespace std;

// Мы должны указать как in, так и out, поскольку используем fstream
fstream iofile(«SomeText.txt», ios::in | ios::out);

// Если мы не можем открыть iofile,
if (!iofile)
{
// то выводим сообщение об ошибке и выполняем функцию exit()
cerr << «Uh oh, SomeText.txt could not be opened!» << endl;
exit(1);
}

char chChar;

// Пока есть данные для обработки
while (iofile.get(chChar))
{
switch (chChar)
{
// Если мы нашли гласную букву,
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:
case ‘A’:
case ‘E’:
case ‘I’:
case ‘O’:
case ‘U’:

// то перемещаемся на один символ назад относительно текущего местоположения файлового указателя
iofile.seekg(-1, ios::cur);

// Поскольку мы выполнили операцию поиска, то теперь можем переключиться на запись данных в файл.
// Заменим найденную гласную букву символом #
iofile << ‘#’;

// Теперь нам нужно вернуться назад в режим чтения файла.
// Выполняем функцию seekg() к текущей позиции
iofile.seekg(iofile.tellg(), ios::beg);

break;
}
}

return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

#include <iostream>
#include <fstream>
#include <cstdlib> // для использования функции exit()
 

intmain()

{

usingnamespacestd;

// Мы должны указать как in, так и out, поскольку используем fstream

fstream iofile(«SomeText.txt»,ios::in|ios::out);

// Если мы не можем открыть iofile,

if(!iofile)

{

// то выводим сообщение об ошибке и выполняем функцию exit()

cerr<<«Uh oh, SomeText.txt could not be opened!»<<endl;

exit(1);

}

charchChar;

// Пока есть данные для обработки

while(iofile.get(chChar))

{

switch(chChar)

{

// Если мы нашли гласную букву,

case’a’

case’e’

case’i’

case’o’

case’u’

case’A’

case’E’

case’I’

case’O’

case’U’

// то перемещаемся на один символ назад относительно текущего местоположения файлового указателя

iofile.seekg(-1,ios::cur);

// Поскольку мы выполнили операцию поиска, то теперь можем переключиться на запись данных в файл.

// Заменим найденную гласную букву символом #

iofile<<‘#’;

// Теперь нам нужно вернуться назад в режим чтения файла.

// Выполняем функцию seekg() к текущей позиции

iofile.seekg(iofile.tellg(),ios::beg);

break;

}

}

return;

}

Результат выполнения программы (содержимое файла SomeText.txt):

Другие полезные методы классов файлового ввода/вывода в языке C++:

   remove() — удаляет файл;

   is_open() — возвращает , если поток в данный момент открыт, и — если закрыт.

Получение данных

Для открытия файла ‘C:\text.txt’ можно использовать следующую команду:

Get-Content -Path ‘C:\Windows\System32\drivers\etc\hosts’

1 Get-Content-Path’C:\Windows\System32\drivers\etc\hosts’

Если у вас множество файлов или вы не уверены в назывании, то вы можете использовать подстановку. Символы подстановок бывают следующих типов:

  • ‘*’ — говорит об неизвестном количестве символов;
  • — говорит, что в этом месте может быть буква ‘a’ или ‘b’;
  • ? — обозначает один неизвестный символ.

Каждый из символов выше можно применять вместе и неограниченное число раз, в любой части пути и имени.

В этом примере я открою сразу два файла: lmhosts и hosts:

Get-Content -Path ‘C:\Windows\System32\drivers\etc\*st*’

1 Get-Content-Path’C:\Windows\System32\drivers\etc\*st*’

Следующие примеры вернут аналогичный результат:

Get-Content -Path ‘C:\Windows\System32\drivers\etc\*ost*’
Get-Content -Path ‘C:\Windows\System32\drivers\etc\*h?st*’

1
2

Get-Content-Path’C:\Windows\System32\drivers\etc\*ost*’

Get-Content-Path’C:\Windows\System32\drivers\etc\*h?st*’

Для похожей фильтрации есть следующие параметры, которые так же позволяют использовать символы подстановок:

  • Include — в этом параметре мы добавляем шаблон, по которому будем включать файл;
  • Exclude — с помощью этого параметра исключает файлы;
  • Filter — исключает результаты.

Для каждого из этих параметров есть обязательно условие — использовать знак ‘*’ в конце пути.

Так мы вернем все файлы с расширением ‘.txt’:

Get-Content -Path ‘C:\*’ -Filter ‘*.txt’

1 Get-Content-Path’C:\*’-Filter’*.txt’

В отличие от Filter, в Include и Exclude мы можем использовать несколько значений. В этом примере мы откроем файлы формата ‘.txt’ и ‘.ini’:

Get-Content -Path ‘C:\*’ -Include ‘*.txt’,’*.ini’

1 Get-Content-Path’C:\*’-Include’*.txt’,’*.ini’

Полное и построчное чтение с поиском

По умолчанию, если мы будем передавать результат команды через конвейер Powershell вывод будет построчный. Это может составить проблему, так как при дополнительных условиях у нас будет возвращаться одна строка, а не весь текст:

Get-Content -Path ‘C:\file*.txt’ | Select-String -Pattern ‘Line 8’

1 Get-Content-Path’C:\file*.txt’|Select-String-Pattern’Line 8′

Что бы текст передавался полностью, а не построчно — используйте параметр Raw:

Get-Content -Path ‘C:\file*.txt’ -Raw | Select-String -Pattern ‘Line 8’

1 Get-Content-Path’C:\file*.txt’-Raw|Select-String-Pattern’Line 8′

Если вам вдруг понадобится выводить по 2 или более строк за раз, можно указать их количество через ReadCount:

Get-Content -Path ‘C:\file*.txt’ -ReadCount 2 | Select-String -Pattern ‘Line 8’

1 Get-Content-Path’C:\file*.txt’-ReadCount2|Select-String-Pattern’Line 8′

Разделение файла

Файл выводится построчно из-за делиметра (разделителя), который по умолчанию равен ‘\n’ (идентификатор новой строки). Мы можем разделить файл иначе, например, использовав точку с запятой:

Get-Content -Path ‘C:\delimiter.txt’ -Delimiter ‘;’

1 Get-Content-Path’C:\delimiter.txt’-Delimiter’;’

То есть результат выше — это массив. В массивах Powershell мы можем получать содержимое по индексам. В следующем примере я просто уберу точку с запятой:

$content = Get-Content -Path ‘C:\delimiter.txt’ -Delimiter ‘;’
# Выведем первый элемент
$content
# Уберем разделитель во всех адресах
foreach ($c in $content){
$c -replace ‘;’,»
}

1
2
3
4
5
6
7

$content=Get-Content-Path’C:\delimiter.txt’-Delimiter’;’

# Выведем первый элемент

$content

# Уберем разделитель во всех адресах

foreach($cin$content){

$c-replace’;’,»

}

Подсчет количества строк

Построчный вывод с командой Powershell позволяет посчитать количество строк во всем файле. Для подсчета используется команда Measure-Object:

Get-Content -Path ‘C:\file.txt’ | measure

1 Get-Content-Path’C:\file.txt’|measure

Если нужна только цифра, а не объект, можно сделать так:

(Get-Content -Path ‘C:\file.txt’ | measure).Count

1 (Get-Content-Path’C:\file.txt’|measure).Count

Кодировки

В параметре —Encoding можно указать следующие кодировки:

  • ASCII
  • BigEndianUnicode
  • BigEndianUTF32
  • Byte
  • Default
  • OEM
  • Unicode
  • UTF7
  • UTF8
  • UTF32
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: