Как посчитать количество строк в xml
Перейти к содержимому

Как посчитать количество строк в xml

  • автор:

Подсчитать количество определённых тегов в XML-файле

как вытащить текст и id понятно, а вот количество comments, likes, reposts к этому тексту не пойму.

>>178 > list="true">>>1768 >>-27321623 >>-27321623 >>1397272611 >>post >>какой то текст >>>vk > >>>8 >>1 > >>>84 >>0 >>1 >>1 > >>>24 >>0 > > >>>1767 >>-27321623 >>-27321623 >>1397272328 >>post >>какой то текст >>>vk > >>>2 >>1 > >>>63 >>0 >>1 >>1 > >>>17 >>0 > > >>>1766 >>-27321623 >>-27321623 >>1397272112 >>post >>какой то текст >>>vk > >>>1 >>1 > >>>81 >>0 >>1 >>1 > >>>20 >>0 > > > > >

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как подсчитать количество определенных тегов в тексте?
Здравствуйте! Имеется огромный текст, в котором требуется найти тег "Teg", который может как.

Как посчитать количество одинаковых тегов в XML файле?
Добрый всем вечер. Помогите советом. Как посчитать количество тегов stop в теге times, при том.

Подсчитать количество определенных строк в текстовом файле
Добрый день! помогите плизз. в общем дело такое, необходимо подсчитать количество определенных.

Удаление определенных атрибутов в xml-файле
Здравствуйте! Вот xml-код. <?xml version="1.0" encoding="utf-8"?> <Racine> <Machine.

Регистрация: 18.05.2014
Сообщений: 7
Можно же организовать через foreach и просто плюсовать в переменную, которую после цикла вывести.
Master of Orion

Эксперт .NET

6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
using System; using System.IO; using System.Xml.Linq; namespace ConsoleApplication40 { class Program { private const string xml = @""1.0"" encoding=""utf-8""?>  178 "true"">  1768 -27321623 -27321623 1397272611 post какой то текст  vk   8 1   84 0 1 1   24 0    1767 -27321623 -27321623 1397272328 post какой то текст  vk   2 1   63 0 1 1   17 0    1766 -27321623 -27321623 1397272112 post какой то текст  vk   1 1   81 0 1 1   20 0    "; static void Main(string[] args) { using (var sr = new StringReader(xml)) { var doc = XDocument.Load(sr); var posts = doc.Descendants("post"); foreach (var post in posts) { Console.WriteLine("Post #", post.Element("id").Value); Console.WriteLine("Comments = ", post.Element("comments").Element("count").Value); } } } } }

Как посчитать количество строк в xml

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

а как читается то?
(1)+ можно, например, через ДокументDOM, там есть методы подсчета количества узлов

если файл делаешь сам, то в корневой элемент засунь количество объектов атрибутом. если не сам, то тогда только, если читаешь не через чтениеХМЛ, оно хорошо тем, что работает последовательно и по этому не жрет памяти, но узнать что-то «вперед» — нереально

(1) Просто ЧтениеXML

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
Пока ЧтениеXML.Прочитать() Цикл

(3) выгрузка КД, не хотелось бы её курочить

(0) чтением XML нельзя, как я понимаю. Оно читает от начала и до упора, количество там никак не прогнозируется.

(0) Прикинь размер файла относительно количества элементов, примерно высчитывай.

(0) Узнать длину файла. Попробовать опоеделить длину строки XML считанного узла. Сделать поправку на число байт в символе и ты получишь примерное положение в файле. Плюс минус разделители строк.

(0) Или одновременно с чтением записывай прочитанное куда-нибудь строками. Длина записанного будет прогрессом.

(0) Или открыть файл дважды. Читать как текст и параллельно — как xml. Хотя, не уверен, что чтениеxml такое позволит.

может так, грубо.
СтрЧислоВхождений(ТекстXML, «<" ) (11) Некошерно, надо весь файл в память считывать. Тогда уж можно и точно посчитать.

Похрен, буду выводить количество прочитанных узлов. Если каждый день делать эту загрузку, то примерное количество всех будет уже известно

В (2) правильный ответ, если, конечно, файл не гигантского размера.
(5) Все таки решил курочить?

Но если файл действительно огромный, то есть еще потоковое чтение данных. Там можно порциями выбирать куски файла (примерно как перебирать выборку запроса), и обрабатывать их. При выборе куска файла система возвращает его содержимое и размер. Размеры накапливаем в какой-то переменной, делим на общий размер файла, умножаем на 100 и таким образом получаем проuhtcc обработки а процентах.

200 метров — это огромный?

(23) Тут правильнее мерять не в метрах, а в количестве узлов. Если там 10 узлов по 20 метров каждый, то не много, а если 20000 узлов — то много.

(25) около 5млн узлов
(25) Это важно для предлагаемого вами чтения всего файла и построения в памяти структуры dom?

(26) Тогда чтобы прочитать это через DOM, надо будет сначала все загрузить в оперативку. Скорее всего заглохнет.

(28) Но это же только что был правильный вариант! Как же так, Юрий?

(27) Да, это важно. Вся эта структура не нужна в оперативке, тем более, что там 5 млн узлов. В этом случае логичнее пробовать потоковое чтение.

(29) Внимательно перечитываем (14), особенно последние 6 слов. Или с первого раза не дошло?

(31) Юрий, я вас не понимаю. То есть, согласно (25), если файл в 200 мегабайт, состоит из 10 узлов с двоичными данными, то он не огромный и ваше (14) применимо, а если в файле в 200 мегабайт 5 млн текстовых узлов, то он огромный и надо читать последние 6 слов?

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

(32) Да, все верно, учитывая, что по условию задачи надо посчитать количество узлов.

200м вроде не много должно занять в памяти. можно прочитать кол-во узлов. закрыть и далее читать стандартно

(35) Проблема как раз в количестве узлов. DOM при 5 миллионах скорее загнется с большой долей вероятности. Хотя ТС может это легко проверить за 15 минут на своем севаке.

(26) и кто будет смотреть на этот прогрессбар.
Сделай, как в типовых обменах данными реализовано, — там просто кружок, который вертится постоянно, символизируя, что все работает и ни чего не сломалось.

(37) С прогрессбаром можно посчитать примерное время окончания обработки файла, иногда это бывает полезно.

(38) ну, узнал ты, что это будет через час. Дальше что?
Кому это может пригодиться и зачем?
Такие штуки должны происходить сами где-то на сервере без пользователей. А серверу прогрессбары не нужны

Серверу и 1С в принципе не нужна.
Пользователю нужно оповещение по электропочте или смс о завершении работ )

«Что касается быстродействия. то на файле 10 000 записей полная обработка заняла 30 секунд и на файле в 100 мегабайт линейно увеличилась в 10 раз.»

«Этот метод немного проще чем простой перебор узлов в DOM документе, но быстродействие. При 10 000 записей 69 секунд , а для 100 000 обработка длилась более часа, так и не завершилась, после чего была снята принудительно.»

«Пятый метод схож с предыдущим, но глобальной фабрике XDTO подается на вход не только сам XML документ, но и его тип. Метод замечательный, как по простоте создания, так и по быстродействию – 3,1 секунды на 10 000 записях.»

Как проверить количество строк в xml файле на C# в Unity?

Как в .xml файле проверить существование xml элемента
Читаю xml данные так: Dim xdoc As XDocument = XDocument.Load("data\Sips.xml") .

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

Как посчитать количество одинаковых тегов в XML файле?
Добрый всем вечер. Помогите советом. Как посчитать количество тегов stop в теге times, при том.

Как подсчитать количество Х строк в файле
Есть одна проблемка: Пытаюсь сделать так: Делаю считывание с файла. Файл такого образца.

Администратор

Эксперт .NET

16392 / 12871 / 5072
Регистрация: 17.03.2014
Сообщений: 26,183
Записей в блоге: 1
angrydev, допустим нам даны два файла

1 2 3 4 5
 version="1.0" encoding="UTF-8"?> >  category="cooking"> lang="en">Everyday Italian >>Giada De Laurentiis >>2005 >>30.00 > >  category="children"> lang="en">Harry Potter >>J K. Rowling >>2005 >>29.99 > > >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
 version="1.0" encoding="UTF-8"?> >  category="cooking">  lang="en">Everyday Italian > >Giada De Laurentiis > >2005 > >30.00 > >  category="children">  lang="en">Harry Potter > >J K. Rowling > >2005 > >29.99 > > >

В первом файле 5 строк, во втором 15. Данные при этом у них полностью одинаковые. Соотвественно возникает вопрос — как нам поможет знание количиства строк? Возможно ты хочешь узнать количество элементов? Как это сделать зависит от структуры документа и его размера. Уточни что именно тебе требуется и выложи пример структуры xml документа с которым ты работаешь.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как найти количество строк в файле?
Узнать количество строк (заканчиваются на .) string str = "1.2.3.4.5.6.7.8.9.10."; .

Как подсчитать количество строк в файле?
Подскажите пожалуйста код программы как подсчитать кол-во строк в файле

Как узнать количество строк в файле?
Как узнать количество строк в файле средствами командной строки? Как выводить определенную.

Как узнать количество строк в файле
как узнать количество строк в файле? допустим есть файл: 111 222 333 112 332 113 113 231 23.

Подсчёт количества строк в текстовом файле

Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой.

Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более того, текстовый файл может быть сколь угодно большим, поэтому мы будем использовать буферизацию потока, чтобы не израсходовать всю доступную оперативную память.

Предположим, наш метод принимает на вход абсолютный путь до целевого файла, а возвращает количество строк в виде целочисленного типа long. Рассмотрим две реализации.

Вариант c LineNumberReader

public static long getLineCountByReader(String fileName) throws IOException <
try ( var lnr = new LineNumberReader( new BufferedReader( new FileReader(fileName)))) <
while (lnr.readLine() != null ) ;
return lnr.getLineNumber();
>
>

Сначала мы в конструкции try-with-resources последовательно создаём три Reader’a, оборачивая один в другой:

  1. FileReader – для работы с файлом.
  2. BufferedReader – для буферизации потока и ускорения обработки.
  3. LineNumberReader – собственно, для подсчёта количества строк.

Все перечисленные ридеры являются ресурсами и конструкция try-with-resources гарантирует нам, что после выхода из этого блока они все будут закрыты.

Затем в цикле вызываем у LineNumberReader метод readLine(). Поскольку никаких дополнительных действий нам делать не надо, то тело цикла будет пустым. После выхода из цикла метод getLineNumber() возвращает нам количество строк в файле.

На мой взгляд, это наиболее «читаемая» реализация, но ниже мы рассмотрим чуть более быструю версию. А пока можем вызвать наш метод:

public static void main(String[] args) throws IOException <
System.out.println( «Lines count: » + getLineCountByReader( «/home/user/very-large-file.txt» ));
>

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

Вариант c инкрементом

Наш метод можно немного ускорить, отказавшись от LineNumberReader. Вместо этого будем подсчитывать строки с помощью обычного инкремента.

public static long getLineCountByIncrement(String fileName) throws IOException <
var lines = 0L ;
try ( var reader = new BufferedReader( new FileReader(fileName))) <
while (reader.readLine() != null ) <
lines++;
>
return lines;
>
>

Здесь мы точно так же в блоке try создаём FileReader и BufferedReader, чтобы по окончании они были гарантированно закрыты. После этого в цикле на каждой итерации также вызываем метод readLine(). На этот раз тело цикла у нас не пустое, в нём мы увеличиваем переменную lines на 1. Такая реализация быстрее предыдущей примерно на 10%.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *