Как правильно создать и прочитать последнюю строку файла?
Если файла нет, вы его создаёте (пустой!) и сразу же читаете из пустого файла. Не хватает записи в файл.
18 сен 2020 в 11:15
@V-Mor DirectoryPath ошибся в названии переменной, этот путь ведет к файлу. Исключение выбрасывается в строке с объявлением переменной lastLine
18 сен 2020 в 13:33
@AlexanderPetrov но ведь я использую метод LastOrDefault()
18 сен 2020 в 13:35
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
При вызове File.Create создаётся файловый поток, вы должны его закрыть, прежде чем опять открывать этот файл. У вас файл занят этим потоком. Пример из документации, где файловый поток закрывается автоматически с помощью using :
using (FileStream fs = File.Create(path)) < byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file."); // Add some information to the file. fs.Write(info, 0, info.Length); >
Отслеживать
ответ дан 18 сен 2020 в 6:01
69.4k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как считать последнюю строку из файла с
В обработке должны быть загружены данные с текстового файла, причём только с его последней строки. Подскажите пожалуйста как на неё перейти?
Т.ПолучитьСтроку(Т.КоличествоСтрок())
ну и зачастую ничего не загрузится.. потому что предпоследняя строка закончена энтером.
(2)Пустить в цикле -1 пока не будет нке пустая строка
(2,3) извращенцы совсем. пусть смотрит чем файл заканчивается, и кстати ни кера не ентером заканчивается. это смотря как выгрузили
(4) ясен пень. хрен ли тут все рассказывать — если челу лень было ЖКК открыть.
(2,4) не знал ничего об этих особенностях. Меня интересует последняя строчка файла mlg.
Помогите пожалуйста! Смотрю в Книге знаний «Парсинг файла MLG (журнал регистрации 1С:Предприятие 7.7)». Вместо цикла по чтению следующей строки файла хочу сделать переход на последнюю строку. Добавляю:
При запуске обработки выдаётся сообщение «Поле агрегатного объекта не обнаружено (КоличествоСтрок)». Что сделал не так? Извините за дилетантство.
(8) В цикле прочитай все строки, и запомни в переменную.
Тебе вообще зачем нужно-то?
Строка инициализации переменной file ?
Файл слишком большой, а мне надо получить ссылку на последний объект, с которым выполнялась работа. Он содержится в последней строке файла mlg. И чтобы не читать построчно весь файл — проще наверное сразу перейти на последнюю строку?
(11) А зачем тебе это? Если для регистрации изменений, то у меня получше кое-что есть.
(11) несомненно, сделай проекцию файла с конца и смещайся в поисках предыдущей #13#10
(13) Не знаю скрипт поддерживает ли это. На Дельфи-то все можно.
Да и непонятно зачем такие вещи. Типо чтобы было?
(15) мне при выполнении обработки надо получить данные из последнего проведенного в базе документа. сведения об этом документе я могу получить только в файле mlg. Вот для этого и надо
(11)(16) romix, я очень благодарен за участие, но мне на данный момент необходимо именно то, что указано в вопросе.
Как считать последнюю строку из файла с
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Помог: 3 раз(а)
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Цитата:
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12
Как считать последнюю строку из файла с
Здравствуйте.
Прошу подсказать, как v8 прочитать текстовый файл начиная с последней строки?
При последовательном доступе похоже читается только с начала.
А другого способа доступа чтото не нашол.
Спасибо
Прочитать сначала в буфер, а потом уже из буфера — как левая нога пожелает.
В буфер читать не хочу т.к. файл сильно большой.
Хочу сразу читать с конца !
Дык не пихай в буфер сразу весь файл, а только последние строки.
А как же это я туда последние строчки запихну?
(4)Ну к примеру в файле десять строк, читаешь с первой по восьмую в Null, а с восьмой по десятую в буфер.
Кто ж данные в текстовом файле хранит, чудо?
(5) Это здорово, только не понятно как узнать скока в файле строк.
Его для этого придется сначала весь прочитать
(5) Да и в NULL читать — как то уж больно кондово.
Где начало того конца, которым оканчивается начало? (с)
А по сути сдаётся мне, что только с помощью WSH
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(«длодло»);
КолечествоСтрок = Текст.КоличествоСтрок();
Пока КоличестувоСтрок > 0 Цикл
Сообщить(Текст.ПолучитьСтроку(КоличествоСтрок));
КоличествоСтрок = КоличествоСтрок — 1;
КонецЦикла;
зы
программисты нах.
(10) Уважаемый
То что Вы написали, это и есть последовательное чтение файла в буфер
причем именно сначала.
А мы тут думаем как бы прочитать файл сконца.
Бо не раздувать этот буфер и впустую не тратить время на чтение.
(11)Ну сказале же уже, либо WSH, либо последовательное чтение в буфер, чтобы не засорять память ненужные строки находящиеся в начале можно выкидывать.
Ты бы вообще объяснил для чего тебе это нужно, может проще решение есть.
(11) Ну, звыняй в 1С такого нету. Чего вы там всегда такое мастерите?
(+13) очумелые ручки. :))))
(10) ВОТ!
Ап стену.
Рождаются же программистами.
Возьмите Нетленку. Там. Это. Реализовано.
Свойства
Позиция
Размер
Процедура/функция
ОкрытьФайл()
ПрочитатьФайл()
(12) Да вот собственно хотелось убедиться, что в 8.1 без использования внешних компонент можно только сначала файл прочитать.
А нужно для того, чтобы шипко длинные файлы обрабатывать т.к. известно, что нужная информация в них чаще находится ближе к концу.
А файлы не мои я их в готовом виде получаю.
а что приходит ? ну, что в этих файлах?
(в качестве бреда) Создаем DBF-файлик, заливаем в него строки текстового файла. После этого можно «читать» как угодно :))
(19) Берем открываем в ФАРе этот файл по Ф3 — и жмем Контрол+Енд, читаем. Более того, если этот текстовый файл в данный момент пишется, то мы сразу увидим добавляемые строки.
(21) Не факт. Смотря в каком режиме «своместности» был открыт файл.
(0) Аф_фтар признайся, «Отче наш» хочешь читать?
(23) Британнику. Раздел — благодарности.
(24) Так не интересно.
ГОСПОДА
В файлах котировки ценных бумаг
Но какое это имеет значение?
(26) Ойк. 500$ и все вам сделаю.
(26) Как это какое? Попробуй громко и отчётливо читать «Отче наш» встав возле церкви, сразу узнаешь какое.
+ (28) Задом наперёд конечно читать.
(26) и что текстовый файл котировки ценных бумаг приближается к 1 ГБ? Это фантастика.
текстовой файл по своей сути последовательно пишется и читается. Хотите «произвольный доступ» — пользуйте соответствующие структуры
(31) Что в этом мире не есть «текстовый файл» ? 🙂
в конце концов забросить с таблицу sql и выбрать нужное. если fso и т.п. — это медленно.
(32) ну грубо говоря все состоит из символов. Но txt и mdf+ldf — две большие разницы по возможностям
Чтение с конца м.б. придется имитировать через многократное чтение, буферизуя строк по 100. А м.б. там метод seek есть, надо смотреть.
Или можно разрубить на мелкие файлики, только потом не забыть их стереть.
ALL: после прочтения постов, мой вариант (19) мне уже не кажется бредом 🙂
(36) Ага. Сделать такую мелкую гальотинку и порубить на файлики. авторов 🙂
(37) не бред. Только в dbf будет медленно. Bulk Insert или DTS так просто не обгонишь.
(38) Медленно — согласен. Но пусть сначала автор озвучит сколько строк в его файлике — кроме того что он «сильно большой». А то может быть и не стоит огород городить.
Scripting.FileSystemObject позволяет пропускать данные (Skip).
Но, чтобы прочитать последнюю строку файла нужно сначала найти разделитель последней и предпоследней строк, а это можно сделать только последовательным чтением файла сначала.
Также хочу заметить, что данная функция честно читает файл по строкам, а не весь сразу в память, чем существенно экономит память и повышает производительность.
Хотя, можно читать файл посимвольно назад.
Для этого можно делать следующее:
Функция ЧитаемФайлВЗад(ИмяФайла)
FsoObject=new ActiveXObject(«Scripting.FileSystemObject»);
Файл=FsoObject.GetFile(ИмяФайла);
РазмерФайла=Файл.Size;// получили размер файла
Файл=0;// сбросили ссылку на всякий пожарный
СтрокаНакопитель=»»;
for(ТекущийБайт=1;ТекущийБайт <РазмерФайл;ТекущийБайт++)do
УказательФайл=FsoObject.OpenTextFile(ИмяФайла,1,false,false);
// мы открыли файл ИмяФайла
// для чтения-1
// не создавать если его нет-false
// без Unicode-false
УказательФайл.Skip(РазмерФайла-ТекущийБайт);
ПрочитанныйБайт=УказательФайл.Read(1);// читаем байт
КодБайта=Asc(ПрочитанныйБайт);
// дело в том, что символ 0 передаётся, как строка нулевой длины
СтрокаНакопитель=СтрокаНакопитель+»,»+String(КодБайта);
УказательФайл.Close();// не забываем закрыть файл
// к сожалению, в системе нет метода Rewind, чтобы вернуться назад
// теоретически, есть метод Line, возвращающий номер строки
// но я не уверен, что там будет правильная информация, после Skip
enddo;
Message(СтрокаНакопитель);
КонецФункции
P.S. код писался с лёту, поэтому работоспособность не гарантиую (по крайней мере описание цикла не будет работать ни в одном мне известном языке) — перевод с JavaScript на 1С — сложное дело.