Как да прочетем само част от тектов файл?

Visual Studio Xamarin Програмиране Основи на програмирането със C#

Как да прочетем само част от тектов файл,
например няколко реда до достигане на специален ред (разделител),
после още няколко реда и т.н.
Например файла съдържа таблици, които е
удобно да се сплитват и парсват поотделно заради
различните формати на данните. Така че е добре да могат
да се четат поточно. Добре е да можем да прочетем само заглавния ред (header) на голям файл, за да разберем, че не ни е нужен, без да замърсяваме паметта с цялото му съдържание.

Аз лично не съм чел файлове на части. Обикновенно се четат целите. Ако става въпрос за големи бази от данни си струва да се обмислят бази данни, но това ще утежни работата на настолно приложение (визирам exe).

Сега тук е момента да обсъдим какви са ти представите за големи таблици. За пример имам таблици в дървовидна структура (утежнява няколко пъти четенето) и в допълнение са криптирани.

Т.е. при отваряне, таблиците се декриптират, сериализират, което включва разчитането и поставянето на данни по обекти и връзване на обектите с графични компоненти. Цялата тази история се случва за 1 - 2 секунди на бавни машини за база от 40 000 позиции.

Сега аз ползвам за тази история директно текстови файлове, но с времето синтаксиса на текстовите файлове се усложни и продължава да се усложнява. За това в новите версии директно минавам на xml. Дори и скоростта да се завиши от 2 сек на 2.5 сек ще ми спести много часове писане във времето.

инж. Мартин Симеонов отговори Ако правиш нещо просто за теста можеш да достъпиш текстовия файл горе долу по следният начин.

Какво визирам. Ако всеки нов ред го делиш с \n а всяка колона с \t при запис парсването на фйала съответно ще изглежда горе долу така:

string file = //четеш го от някаде

string[] row = file.Split ('\n');

for (int i = 0; i < row.Lenght; i++)
{
     string[] value = row[i].Split ('\t');
     value[0] // Ще е стойността от първата колона на iтия ред
}

Добре е да слагаш проверка при чете не редовете дали имат необходимият брой колони преди да ги достъпваш за да не изгърми нещо.

Ако ти трябват няколко таблици можеш да сложиш разделителни редове и да четеш до тях, но това вече наистина отива на зле ( : По - добре не добавяй повече от една таблица така.

Благодаря за отговора! Имах предвид следното: Имаме папка с файлове, в които на първия ред е заглавието на задачата. Идеята е да представим съответствието между името на файла и заглавието на задачата. Разбира се, предложеният вариант работи, но някак ми се струва разточително да прочета няколко книги, за да създам каталог от заглавията им.

Чети смело ( : Компютрите са мощни

А защо не направиш цикъл за четене от файла, започвайки от началото до първия LF или CR /CHR10 или CHR13/ - край на ред. Така ще си сигурен, че си прочел само един ред, а после го сравнявай с каквото пожелаеш. Може да прочетеш два реда. Да ги запишеш в масив или "мемо" променлива ... Защо наистина да четеш целия файл при условие, че ти трябва ред или два?


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация