Что написано на предпоследней строке
Перейти к содержимому

Что написано на предпоследней строке

  • автор:

Что написано на предпоследней строке

Колонка1 Колонка2
Второе C
Второе D
Второе E
Второе F
Первое A
Первое B
Третье G
Третье H
Третье I

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

Второе F
Первое B
Третье I

Код такой примерно:

тз = Новый ТаблицаЗначений;
тз.Колонки.Добавить(«Колонка1»);
тз.Колонки.Добавить(«Колонка2»);
стр = тз.Добавить();
стр.Колонка1 = «Первое»;
стр.Колонка2 = «A»;
стр = тз.Добавить();
стр.Колонка1 = «Первое»;
стр.Колонка2 = «B»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «C»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «D»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «E»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «F»;
стр = тз.Добавить();
стр.Колонка1 = «Третье»;
стр.Колонка2 = «G»;
стр = тз.Добавить();
стр.Колонка1 = «Третье»;
стр.Колонка2 = «H»;
стр = тз.Добавить();
стр.Колонка1 = «Третье»;
стр.Колонка2 = «I»;

СтаршийИндекс = тз.Количество()-2;
Для сч=0 по СтаршийИндекс цикл
если тз[сч].Колонка1 = тз[сч+1].Колонка1 тогда
/////////////////
конецесли;
конеццикла;

Подскажите, что написать вместо комментариев?

До=»!№#»;
тз.Сортировать(«Колонка1,Колонка2»)
Для Каждого Стр Из тз Цикл
Если ДО<> «!№#» Стр.Колонка1<>ДО Тогда
//Добавляем куда надо Стр.колонка1 и Стр.Колонка2
КонецЕсли;
До=Стр.Колонка1;
КонецЦикла;

//Добавляем последний раз куда надо Стр.колонка1 и Стр.Колонка2

Обшибся немного:-) Вернее запомнаем не ДО_Колонка1 и ДоКолонка2
и их добавляем

Я так давным давно итги выводил поэтому запарился по привычке:-)

ну вобщем надеюсь смысл понятен:-)
группируешь по 1й выясняешь максимум номеров строк, соединяешь с исходной по номеру строки
(2) не совсем понял, ДО что?
(4) а если надо не совсем максимум последней колонки, а только последнее значение?
(6) вот и бери его из строки с максимальным номером
(7) так метод Свернуть() только суммы вычисляет, а ты говоришь надо Максимум
Как его вычислить?
(8) а соединение тебя не насторожило? я про запрос говорю

(9) Зачем тз добавлять в запрос, а потом обратно в тз, неужели по-другому нельзя?

Попробовал сделать так:
добавил в ТЗ еще одну колонку с именем «Максимум»

СтаршийИндекс = тз.Количество()-2;
Для сч=0 по СтаршийИндекс цикл
если тз[сч].Колонка1 = тз[сч+1].Колонка1 тогда
тз[сч].Максимум = сч;
конецесли;
конеццикла;

Почему-то в результате выполнения у последних строк пропуски » «

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

(10) не, ну можно и циклами сэмулировать то же. а зачем?
(11) сортировка похерит порядок второй колонки
Хуже студентов, чессдово.
Особо в пятницу.
(13) а она там зачем?

СтаршийИндекс = тз.Количество()-2;
Для сч=0 по СтаршийИндекс цикл
если тз[сч].Колонка1 = тз[сч+1].Колонка1 тогда
тз[сч].Максимум = сч;
конецесли;
конеццикла;

СтаршийИндекс = тз.Колонки.Количество() — 1;
Индекс = тз.Количество() — 1;
Пока Индекс >= 0 Цикл
Для Сч = 0 По СтаршийИндекс Цикл
Если ТипЗнч(тз[Индекс][Сч]) = Тип(«Число») Тогда
тз.Удалить(Индекс);
Прервать;
КонецЕсли;
КонецЦикла;
Индекс = Индекс — 1;
КонецЦикла;

А чтобы не парится с выходом за границу добавляешь после сортировки в конец барьер — пустую строку
Потом удаляешь
(15) ну ты ж предлагаешь сортирнуть и обходить
а у автора критерий последнести — максимальный номер строки
(16) нет. ибо тз.Удалить(Индекс). вчитываться не хочу

(20) да, нужна самая последняя строка с учетов значения первой колонки

код из (16) вроде бы нормально все делает

(21) так все работает же и выводит то, что я хотел
(23) на любых входных данных?
пересунь колонку со вторым в конец, а с третьим в начало

(25) так я же сортировку делаю заранее

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

(28) меня вообще-то правильный вариант интересует, типа как будет самым верным решением?

В принципе могу ТЗ засунуть в запрос, а там уже отбирать.
Запросом будет правильнее?

(29) красивше — однозначно. быстрее — почти наверняка. строк кода меньше — точно нет
Вот и выросло поколение 1С-ников которые запросы знают лучше базовых алгоритмов программирования.

(30) ок, попробую запросом

(31) так в конструкторе запроса кодинг в основном кликами мышки, в то время как алгоритмы надо думать как писать xD

(30) Запросом и красивше? Кому как, но тормознее это почти наверняка ибо без группировок не обойтись вместо простого одного цикла.
Сложность выше O(N) как минимум O(2N) будет с запросом.

(32) Чему тут думать то? Тебе же сказали в (11) как сделать!

(32) правильно! думать над запросами — признак слабоумия. писать текст запроса руками — повод для прострела коленки

(33) ты не путай сложность алгоритма со скоростью исполнения

(34) я не совсем понял, что в (11) написано, т.е. мне надо таблицу обходить, проверяя равенство первой колонки и сравнивать значения второй колонки с предыдущей?

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

(5) блин проще сделать , чем объяснить:-)
лови пример
https://yadi.sk/d/WAhLO8rSuVmVw

КолСтрок = тз.Количество();
Для НомСтр = 0 По КолСтрок-2 Цикл
ТекСтр = тз[НомСтр];
СледСтрока = тз[НомСтр+1];
Если ТекСтр.Колонка1<>СледСтрока.Колонка1 Тогда
Сообщить(«»+ТекСтр.Колонка1+» — «+ТекСтр.Колонка2);
КонецЕсли;
КонецЦикла;
ТекСтр = тз[КолСтрок-1];
Сообщить(«»+ТекСтр.Колонка1+» — «+ТекСтр.Колонка2);

+(39) Это работающий модуль из обработки:

Процедура КнопкаВыполнитьНажатие(Кнопка)
ДоКол1=»ййй»;
ДоКол2=»ййй»;
Для Каждого Стр из тз Цикл
Если ДоКол1<>«ййй» Тогда
Если ДоКол1<>Стр.Колонка1 Тогда
Нов=тз2.Добавить();
Нов.Колонка1=ДоКол1;
Нов.Колонка2=ДоКол2;
КонецЕсли;
КонецЕсли;
ДоКол1=Стр.Колонка1;
ДоКол2=Стр.Колонка2;
Конеццикла;
Нов=тз2.Добавить();
Нов.Колонка1=ДоКол1;
Нов.Колонка2=ДоКол2;

Процедура ПриОткрытии()
тз.Колонки.Добавить(«Колонка1»);
тз.Колонки.Добавить(«Колонка2»);
тз2.Колонки.Добавить(«Колонка1»);
тз2.Колонки.Добавить(«Колонка2»);

стр = тз.Добавить();
стр.Колонка1 = «Первое»;
стр.Колонка2 = «A»;
стр = тз.Добавить();
стр.Колонка1 = «Первое»;
стр.Колонка2 = «B»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «C»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «D»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «E»;
стр = тз.Добавить();
стр.Колонка1 = «Второе»;
стр.Колонка2 = «F»;
стр = тз.Добавить();
стр.Колонка1 = «Третье»;
стр.Колонка2 = «G»;
стр = тз.Добавить();
стр.Колонка1 = «Третье»;
стр.Колонка2 = «H»;
стр = тз.Добавить();
стр.Колонка1 = «Третье»;
стр.Колонка2 = «I»;

тз.Сортировать(«Колонка1, Колонка2»);
Элементыформы.тз.СоздатьКолонки();
Элементыформы.тз2.СоздатьКолонки();

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

Доброго времени суток, подскажите пожалуйста, как добавить строку через консоль командой именно в предпоследнюю строку, так как последняя строка закрывается скобкой, и ее трогать нельзя.
param = какой то текст,
какой то текст,
какой то текст,
какой то текст,
какой то текст,
тут нужно добавить строку
>

  • Вопрос задан более трёх лет назад
  • 392 просмотра

Комментировать
Решения вопроса 1

fox_12

Расставляю биты, управляю заряженными частицами

Удалить последнюю строку
Дописать новую строку
Дописать скобку

param = какой то текст,
какой то текст,
какой то текст,
какой то текст,
какой то текст,
>

sed -i '$ d' 1.txt echo 'новая строка' >> 1.txt echo '>' >> 1.txt cat 1.txt

param = какой то текст,
какой то текст,
какой то текст,
какой то текст,
какой то текст,
новая строка
>

Перевод «предпоследней строке» на английский

В предпоследней строке настоящего подпункта (с) в выражение «основное производство» следует вставить слово «иностранное».

In the penultimate line of the present subparagraph (c), the word «foreign» should be inserted before the words «main proceeding».

В предпоследней строке пункта, слово «решение» должно быть написано с заглавной буквы.
In the penultimate line of the paragraph, the word «decision» should be capitalized.
В предпоследней строке снять слово «партнерств».
Delete the word «partnerships» in the sixth line.

В предпоследней строке пункта 10 постановляющей части слово «нарушений» следует заменить следующей фразой: «многочисленных и сложных факторов, включая нарушения».

In the sixth line of paragraph 10, the words «human rights abuses» should be replaced by «multiple and complex factors, including human rights violations,».

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

The proverb begins on the penultimate line, continues on the last line of the text panel, and runs sequentially from the first line down.

В тексте на русском языке в предпоследней строке пункта 1 после слова «новых» следует добавить запятую.

In the Russian text, a comma should be inserted just after the word «novykh» (new) in the penultimate line of paragraph 1.

ПРЕДСЕДАТЕЛЬ ставит под вопрос необходимость термина «частный» в предпоследней строке пункта и предлагает его исключить.

The CHAIRMAN questioned the need for the term «private» in the penultimate line of the paragraph and suggested its deletion.

И, наконец, в предпоследней строке пункта 19 перед словом «сторон» следует поставить слово «государств».

Finally, in the penultimate line of paragraph 19, the word «States» should be inserted before «parties».

Было указано, что в предпоследней строке пункта 7 после слова «заявок» следовало бы восстановить слова «предложений или оферт».

It was pointed out that the words «proposals or offers» should be reinstated after the word «tenders» in the penultimate line of paragraph (7).

Можно было бы убрать слова «и переговорах о таком соглашении», которые содержатся в предпоследней строке пункта 2, сохранив, безусловно, за третьим государством право участия в консультациях.

Perhaps the words «and in the negotiation of», in the penultimate line of the paragraph, could be deleted, with the third State retaining an entitlement to participate in the consultations.

Он отмечает изменения в предпоследней строке пункта 10 постановляющей части, которую следует читать: «правовой и практической точек зрения, а также для установления местонахождения многих афганцев, по-прежнему считающихся без вести пропавшими».

The penultimate line of paragraph 10 had been amended and should read as follows: «. legally and effectively ended, as well as for the tracing of the many Afghans still missing. «.

В частности, в пункте 4 постановляющей части в предпоследней строке слово «дополнительные» следует заменить на «адекватные»; из первой строки пункта 9 постановляющей части следует удалить слово «международный».

Particularly, in the penultimate line of operative paragraph 4, the word «additional» should be replaced by «adequate», and in the first line of operative paragraph 9, the word «international» should be deleted.

И наконец, в пункте 6 слово «просит» следует заменить словами «настоятельно призывает», а в предпоследней строке перед словом «подготовке» следует добавить слово «надлежащей».

Finally, in paragraph 6, the word «Requests» should be replaced by «Urges», and the words «the preparations» in the penultimate line should be replaced by «adequate preparations».

Г-н ТОРНБЕРРИ предлагает заменить в предпоследней строке фразу «местная и региональная культура» фразой «местная и региональная культура и традиции».

Mr. THORNBERRY proposed replacing, in the penultimate line, the phrase «the local and regional culture» by «the local and regional cultures and traditions».

Г-н РЕШЕТОВ в ответ на вопрос г-на ШЕРИФИСА говорит, что, по сути дела, было бы неблагоразумным поддерживать партию, о которой идет речь в предпоследней строке данного пункта, в том отношении, что она является крупной партией.

Mr. RECHETOV, answering a question from Mr. SHERIFIS, said that it would indeed be rather inadvisable to encourage the party referred to in the penultimate line of the paragraph in the belief that it was a major party.

В пункте 10 запятую после слова «силу» [в русском варианте запятая отсутствует. — Прим. перев.] в предпоследней строке следует снять.

In paragraph 10, the comma following the word «nature» in the penultimate line should be deleted.

Г-н РЕШЕТОВ (Докладчик по стране) предлагает в предпоследней строке этого пункта заменить фразу «поощрять их к использованию» фразой «поощрять использование».

Mr. RECHETOV (Country Rapporteur) suggested that in the penultimate line of the paragraph the phrase «encourage them to use» should be replaced by «encourage the use of».

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

In the English version, in the penultimate line of the paragraph, the word «conclude» should be replaced by «further extend», so that the last part of the paragraph reads:

В предпоследней строке пункта 22 постановляющей части следует опустить слова «вынести рекомендации».

The words «to make recommendations» in the second last line of operative paragraph 22 should be deleted.

AHK: Поиск последней строки в .txt

Здравствуйте форумчане.
Появился у меня такой вопрос: Как отобразить в msgbox последнею строку текстового документа? Т.е то, что в ней написано.

2 Ответ от ypppu 2018-07-06 18:51:04

  • ypppu
  • Разработчик
  • Неактивен

Re: AHK: Поиск последней строки в .txt

Смотрите в справке второй пример к команде Loop (чтение файла).

3 Ответ от MirchikAhtung 2018-07-06 21:30:46

Re: AHK: Поиск последней строки в .txt

ypppu А можно ли сделать чтение 2-й строки с конца например?

4 Ответ от svoboden 2018-07-06 22:25:22 (изменено: svoboden, 2018-07-06 22:41:34)

  • svoboden
  • Заблокирован
  • Неактивен

Re: AHK: Поиск последней строки в .txt

Используйте библиотеку TF для этой цели.

5 Ответ от MirchikAhtung 2018-07-06 22:42:17 (изменено: MirchikAhtung, 2018-07-06 22:59:14)

Re: AHK: Поиск последней строки в .txt

svoboden
Брал с ahkWiki, тоже работает.

Loop, read, trap.txt last_line := A_LoopReadLine MsgBox, %last_line%

Без этой библиотеки значит никак?

6 Ответ от serzh82saratov 2018-07-06 23:09:33

  • serzh82saratov
  • Разработчик
  • На форуме

Re: AHK: Поиск последней строки в .txt
MsgBox % Func(A_ScriptFullPath, 2) Func(FilePath, Line)

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 Ответ от svoboden 2018-07-06 23:13:28 (изменено: svoboden, 2022-05-21 23:59:47)

  • svoboden
  • Заблокирован
  • Неактивен

Re: AHK: Поиск последней строки в .txt

MirchikAhtung, можно, конечно, складывать переменные:

 LastLine := A_LoopReadLine Line := LastLine 

Но я бы так не делал.

8 Ответ от Malcev 2018-07-07 00:12:28

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Поиск последней строки в .txt

svoboden пишет:

Используйте библиотеку TF для этой цели.

Я бы не использовал эту библиотеку, недоделанная она:

#Include tf.ahk TestFile=1`r2`r3 FileDelete, TestFile.txt FileAppend, %TestFile%, TestFile.txt F=TestFile.txt MsgBox % TF_ReadLines("TestFile.txt",3)

9 Ответ от serzh82saratov 2018-07-07 01:07:18 (изменено: serzh82saratov, 2018-07-07 01:40:54)

  • serzh82saratov
  • Разработчик
  • На форуме

Re: AHK: Поиск последней строки в .txt

Лучше наверное так, не надо 2 раза открывать файл, легко переделать на простой текст, можно указать строку сначала.

 MsgBox % NeedLine(A_ScriptFullPath, -1) NeedLine(FilePath, Line) < FileRead, Text, %FilePath% Text := StrReplace(StrReplace(Text, "`r`n", "`n"), "`r", "`n") "`n" s := InStr(Text, "`n", 0, (Line >0), Abs(Line - 1)) + 1 Return SubStr(Text, s, InStr(Text, "`n", 0, (Line > 0), Abs(Line)) - s) > 

И добавить если указанная строка больше кол-ва строк в тексте, то при запросе назад показать первую строку, при запросе вперед показать последнюю строку.

 MsgBox % NeedLine("first row`r`nsecond row`r`nlast row", 4) MsgBox % NeedLine("first row`r`nsecond row`r`nlast row", -4) NeedLine(Text, Line) < Text := StrReplace(StrReplace(Text, "`r`n", "`n"), "`r", "`n") "`n" StrReplace(Text, "`n", "", Count) Abs(Line) >Count && (Line := (Line > 0) ? Count : 1) s := InStr(Text, "`n", 0, (Line > 0), Abs(Line - 1)) + 1 Return SubStr(Text, s, InStr(Text, "`n", 0, (Line > 0), Abs(Line)) - s) > 

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 Ответ от teadrinker 2018-07-07 01:56:17 (изменено: teadrinker, 2018-07-07 02:07:13)

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Поиск последней строки в .txt
filePath := "D:\Downloads\test.txt" MsgBox, % FileReadLineFromEnd(filePath, 2) FileReadLineFromEnd(filePath, nLineFromEnd)

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 Ответ от Malcev 2018-07-07 02:22:17

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Поиск последней строки в .txt

teadrinker, так не получается:

TestFile=1`r2`r3 FileDelete, TestFile.txt FileAppend, %TestFile%, TestFile.txt MsgBox, % FileReadLineFromEnd("TestFile.txt", 2) FileReadLineFromEnd(filePath, nLineFromEnd)

12 Ответ от teadrinker 2018-07-07 02:23:51

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Поиск последней строки в .txt

Я с такими файлами не сталкивался.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 Ответ от YMP 2018-07-07 06:52:23

Re: AHK: Поиск последней строки в .txt

serzh82saratov пишет:

И добавить если указанная строка больше кол-ва строк в тексте, то при запросе назад показать первую строку, при запросе вперед показать последнюю строку.

Но ведь это не отвечает запросу.

14 Ответ от serzh82saratov 2018-07-07 14:30:00

  • serzh82saratov
  • Разработчик
  • На форуме

Re: AHK: Поиск последней строки в .txt

Я просто добавил чтобы было понятно как определять если запрос превышает кол-во строк.

teadrinker пишет:

Я тоже сразу подумал про StrSplit, но загонять в массив например 5000 строк ради вывода одной, кажется избыточным.
Наверняка ТС читает какой нибудь лог, и он со временем разрастается. Когда речь про какие нибудь последние строки в файле, это похоже на поиск новой инфо в логе, тогда проще так.

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

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