Как найти самую длинную строку в файле
На листе, если вы хотите узнать, какая ячейка содержит самые длинные или самые короткие символы, а затем извлечь ее из столбца, как вы могли бы это сделать? Обычно вы можете посчитать количество текстовых строк в списке одну за другой и сравнить их, чтобы получить результат. Но здесь я могу рассказать о простой формуле, которая поможет вам найти самый длинный или самый короткий текст по мере необходимости.
Вкладка Office позволяет редактировать и просматривать в Office с вкладками и значительно упрощает работу . Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%- Повторное использование чего угодно: Добавляйте наиболее часто используемые или сложные формулы, диаграммы и все остальное в избранное и быстро используйте их в будущем.
- Более 20 текстовых функций: Извлечь число из текстовой строки; Извлечь или удалить часть текстов; Преобразование чисел и валют в английские слова.
- Инструменты слияния : Несколько книг и листов в одну; Объединить несколько ячеек / строк / столбцов без потери данных; Объедините повторяющиеся строки и сумму.
- Разделить инструменты : Разделение данных на несколько листов в зависимости от ценности; Из одной книги в несколько файлов Excel, PDF или CSV; От одного столбца к нескольким столбцам.
- Вставить пропуск Скрытые / отфильтрованные строки; Подсчет и сумма по цвету фона ; Отправляйте персонализированные электронные письма нескольким получателям массово.
- Суперфильтр: Создавайте расширенные схемы фильтров и применяйте их к любым листам; Сортировать по неделям, дням, периодичности и др .; Фильтр жирным шрифтом, формулы, комментарий .
- Более 300 мощных функций; Работает с Office 2007-2019 и 365; Поддерживает все языки; Простое развертывание на вашем предприятии или в организации.
Найдите самые длинные или самые короткие текстовые строки из столбца с формулой массива
Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!
Чтобы получить самую длинную текстовую строку из списка данных, вам может помочь следующая формула массива.
1. Рядом со списком данных в пустой ячейке введите следующую формулу:
=INDEX(A2:A11,MATCH(MAX(LEN(A2:A11)),LEN(A2:A11),0)) , см. снимок экрана:
Чаевые: В приведенной выше формуле A2: A11 указывает диапазон данных, который вы хотите использовать, вы можете изменить его по своему усмотрению.
2, Затем нажмите Shift + Ctrl + Enter вместе, и была извлечена самая длинная текстовая строка. Смотрите скриншот:
Внимание: Если вам нужно получить самую короткую текстовую строку, примените эту формулу массива:
=INDEX(A2:A11,MATCH(MIN(LEN(A2:A11)),LEN(A2:A11),0)) , и не забудьте нажать Shift + Ctrl + Enter одновременно.
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 3 года назад .
Необходимо найти N самых длинных строк в файле и вывести их в другой файл в обратном порядке.
Как это можно сделать наиболее эффективно по скорости работы и потреблению памяти?
Разбейте задачу на подзадачи.
- Как читать и писать файл со строками? - std::fstream и производные классы
- Как работать со строками? Как узнать длину строки? - std::string
- Как работать с набором строк? - std::list / std::vector
- Как отсортировать набор? - std::list::sort() + шаблоны + компаратор
После 1-2 часов внимательной работы с поисковиком по этим пунктам у вас будет хорошая база знаний для решения этой задачи. Обязательно пишите небольшие кусочки кода самостоятельно, не берите готовые примеры - это убивает творчество.
UPD. Вопрос был изменен автором, поэтому обновляю и ответ
Чтобы узнать самые длинные строки в файле, придется прочитать весь файл. Если вы не прочитаете хотя бы одну строку - возможно она и была самой длинной. Проще всего использовать std::fstream + std::list + std::getline
Теперь у нас есть список из строк. Нам нужно взять оттуда N самых длинных строк. Сортируем по длине строки! Нам поможет std::list::sort()
Я ищу самый простой способ напечатать самую длинную строку в файле. Я немного погуглил и неожиданно не смог найти ответ. Я часто печатаю длину самой длинной строки в файле, но я не знаю, как на самом деле напечатать самую длинную строку. Кто-нибудь может предложить решение для печати самой длинной строки в файле? Заранее спасибо.
Как насчет того, когда есть несколько «самых длинных» строк? Поскольку вы хотите больше, чем простая максимальная длина, хотите ли вы видеть все экземпляры линий, которые равны по длине?UPD : обобщение всех советов в комментариях
То есть и вызов другой команды ( cat ), и использование канала являются дорогостоящими операциями, не говоря уже о том, что для awk более эффективно просто читать файл. Влияние на производительность определенно заметно, если это делается часто, и даже в этом случае вы полностью злоупотребляете cat . @laebshade Абсолютно есть причина - вам не нужно запоминать, какие команды принимают имена файлов, а какие нет, или заботиться о том, какая команда будет выполняться первой в конвейере. Если вы собираетесь писать сценарий, который часто запускается, непременно переживайте о чем-то подобном. Если вы пишете одноразовую вещь, чтобы найти самую длинную строку в файле, дополнительный процесс и часть времени, потраченного на это, совершенно не имеют значения. Глупо, что люди так одержимы этим, это невероятно незначительно @ Кит Томпсон: cat здесь не бесполезно. Это может быть бесполезно для компьютера, но для человека-читателя это может обеспечить ценность. Первый вариант четко показывает входные данные. Поток более естественный (слева направо). Во втором случае вы не знаете, что это за ввод, если не прокрутите окно. @JFSebastian Даже если вы хотите это слева, вам не нужно cat . < file command работает просто отлично. @JFSebastian: тот факт, что перенаправление может быть записано в начале команды, немного неясен; < filename command эквивалентно filename < command в каждой оболочке, которую я пробовал. Но как только вы узнаете об этом, вы сможете воспользоваться этим при написании длинных каналов, которые четко показывают направление потока данных (без вызова дополнительной команды): < input-file command1 | command2 | command3 > output-file +1 Было много интересных решений, но это было самое простое. (Без кота было бы проще, если бы awk прочитал файл, но зачем спорить?)Сначала он читает файл внутри подстановки команд и выводит длину самой длинной строки (ранее expand конвертирует табуляцию в пробелы, чтобы преодолеть семантику wc -L - каждая вкладка в строке будет добавлять 8 вместо 1 к длине строки). Затем эта длина используется в sed выражении, означающем «найти строку с таким количеством символов, напечатать ее и выйти». Так что это на самом деле может быть настолько оптимальным, так как самая длинная строка находится рядом с верхом файла, хе-хе (спасибо большое за потрясающие и конструктивные комментарии).
Другой, я думал раньше, чем sed (в bash):
@Chris Down: Да, это так. Но вопрос был о самом худшем, не самом эффективном методе. Тем не менее, отлично подходит для небольших и средних файлов или некритических задач. ВНИМАНИЕ : опция wc -L, --max-line-length печатает длину самой длинной строки, в соответствии с man-страницей, но если вы копаете глубже (например, когда вы получаете неправильные / неожиданные результаты), вы обнаружите, что эта опция увеличивает длину на 8 для каждого 1 символа табуляции \x09 посмотреть этот Unix & Linux Q / A PS. Ваш ответ напечатает все «одинаково длинные» строки, что, вероятно, является хорошей вещью . Чтобы заставить wc считать только 1 символ на вкладке, это работает. sed -rn "/.<$(<file expand -t1 |wc -L)>/p" file read line будет интерпретировать обратные косую черту символов как буквальный полукокс, например \A resloves к A , которые, конечно , эффективны отчеты короче , чем фактические байтовое использование . Для того, чтобы предотвратить эту сбежавшую интерпретацию, использование: read -r line . , , , Кроме того, чтобы заставить версию sed + wc выйти после первой «самой длинной строки», измените p на .. sed -rn "/.<$(<file expand -t1 |wc -L)>/" fileВот решение Perl:
Или, если вы хотите напечатать все самые длинные строки
Поскольку у меня не было ничего лучше, я запустил несколько тестов для текстового файла 625M. Удивительно, но мое решение на Perl было последовательно быстрее, чем другие. Конечно, разница с принятым awk решением крошечная, но она есть. Очевидно, что решения, которые печатают несколько строк, работают медленнее, поэтому я отсортировал их по типу, быстрее и медленнее.
Выведите только одну из самых длинных строк:
Вывести все самые длинные строки:
Grep первая самая длинная линия
Как это работает
Команда состоит из двух частей: grep - и wc вызова:
wc Используется в расширении процесса, $( . ) так оно выполняется до grep . Он рассчитывает длину самой длинной строки. Синтаксис расширения оболочки смешивается с синтаксисом шаблона регулярного выражения в некоторой путанице, поэтому я разложу расширение процесса:
Здесь расширение процесса было заменено на возвращаемое значение, создавая используемую grep командную строку. Теперь мы можем более легко прочитать регулярное выражение: оно точно соответствует от начала ( ^ ) до конца ( $ ) строки. Выражение между ними соответствует любому символу, кроме новой строки, повторяется 42 раза. В совокупности это строки, состоящие ровно из 42 символов.
Теперь вернемся к реальным командам оболочки: grep опция -E ( --extended-regexp ) позволяет избежать экранирования <> . Option -m 1 ( --max-count=1 ) останавливает ее после того, как найдена первая строка. Команда < in wc записывает файл в его стандартный ввод, чтобы предотвратить wc печать имени файла вместе с длиной.
Какие самые длинные строки?
Чтобы сделать примеры более удобочитаемыми, когда имя файла встречается дважды, я буду использовать переменную f для имени файла; Каждый $f в примере может быть заменен именем файла.
Показать первую самую длинную строку - первую строку длиной до самой длинной строки:
Показать все самые длинные строки - все строки длиной до самой длинной строки:
Показать последнюю самую длинную строку - последнюю строку длиной до самой длинной строки:
Показать одну самую длинную строку - самая длинная строка длиннее всех других строк или ошибка:
(Последняя команда даже более неэффективна, чем другие, поскольку она повторяет полную команду grep. Очевидно, что она должна быть разложена таким образом, чтобы выходные данные wc и строки, записанные с помощью grep , сохранялись в переменные.
Обратите внимание, что все самые длинные строки могут фактически быть всеми строками Для сохранения в переменной необходимо сохранить только первые две строки.)
var
f: text;
s: string;
max: string := '';
begin //в папке с программой должен быть файл "input.txt"
if FileExists('input.txt') then begin Assign(f, 'input.txt'); Reset(f); while not Eof(f) do begin Readln(f, s); if Length(s) > Length(max) then max := s; end; Writeln('Самая длинная строка в файле: '); Writeln(max); Close(f); end else Writeln('Файл не найден'); end.
Новые вопросы в Информатика
Решите пожалуйста первые 4 задания, 40 баллов 11 класс
ПЖ! ПОМОГИТЕ!В Эксель, составить ведомость начисления заработной платы сотрудников за февраль месяц. Информация о тарифах оплаты (с указанием вида вал … юты), штатном расписании предприятия и ведомость начисления заработной платы должны быть расположены на разных листах книги табличного процессора. Формульные выражения, приведенные в ведомости, не должны быть привязаны к конкретному значению оклада. Тариф определяется автоматически по должности работника.
помогите заделать информатику пожалуйста срочно даю 100 балов
помогите заделать информатику пожалуйста срочно даю 100 балов
помогите заделать информатику пожалуйста срочно даю 100 балов
НА ПАСКАЛЕ! Напишите программу, которая заполняет массив из N=10 элементов случайными числами в диапазоне [10,50], выводит его на экран, а затем наход … ит индексы всех элементов, равных введенному числу X. Программа должна вывести ответ "не найден", если в массиве таких элементов нет. Пример: Массив: 12 45 30 18 30 15 30 44 32 17 Что ищем: 30 A[3] = 30 A[5] = 30 A[7] = 30
НА ПАСКАЛЕ! Напишите программу, которая заполняет массив из N=10 элементов случайными числами в диапазоне [-10,10], выводит его на экран, а затем нахо … дит индекс последнего элемента, равного введенному числу X. Программа должна вывести ответ "не найден", если в массиве таких элементов нет. Пример: Массив: -5 -6 2 3 -3 0 8 -3 0 9 Что ищем: 0 A[9] = 0
НА ПАСКАЛЕ! Напишите программу, которая заполняет массив из N=10 элементов случайными числами в диапазоне [0,20], выводит его на экран, а затем находи … т индекс первого элемента, равного введенному числу X. Программа должна вывести ответ "не найден", если в массиве таких элементов нет. Пример: Массив: 5 16 2 13 3 14 18 13 16 9 Что ищем: 13 A[4] = 13
Я новичок в java, так голый со мной. Я пишу программу, которая использует метод Scanner для чтения текстового файла и выводит: количество слов, количество предложений, среднее число слов на предложение, самое длинное предложение и кратчайшее предложение. Пока у меня есть все, кроме самых длинных и кратчайших предложений, и я не могу понять их. Вот что я до сих пор.
Если бы кто-нибудь мог помочь, я бы высоко оценил это!
спросил(а) 2013-03-06T12:35:00+04:00 8 лет, 8 месяцев назадИнициализируйте int currentSentenceLength = 0 и int maxSentenceLength = 0 вне вашего цикла. Для каждого word : increment currentSentenceLength . Если word содержит . , ! или ? do: maxSentenceLength = Math.max(currentSentenceLength, maxSentenceLength); currentSentenceLength = 0; maxSentenceLength = Math.max(currentSentenceLength, maxSentenceLength); currentSentenceLength = 0; return maxSentenceLength
Вы можете сделать то же самое для кратчайшего предложения.
ответил(а) 2013-03-06T12:43:00+04:00 8 лет, 8 месяцев назадУстановите первое предложение как самое длинное и кратчайшее. Итерации по всем предложениям, сравните их с самыми короткими и самыми длинными. Если вы найдете более короткое предложение, чем кратчайшее, используйте его как кратчайшее. Если вы найдете более длинное предложение, чем самое длинное, используйте его как можно дольше.
ответил(а) 2013-03-06T12:41:00+04:00 8 лет, 8 месяцев назадВ приведенном ниже коде найдите самую длинную и самую маленькую строку вместе с номером строки из текстового файла. (Ограничение: если две строки одинаковы, то он рассматривает первую длинную или короткую строку). Я использовал HashMap для хранения строки (номер строки в качестве ключевого и линейного содержимого как значение)
Если что-то нужно добавить в этот код, напишите.
ответил(а) 2014-06-22T20:52:00+04:00 7 лет, 5 месяцев назадСогласно вашему исходному коду, вам нужно будет получить количество слов в предложении. Затем вы можете либо обновить переменные, которые будут хранить текущее минимальное/максимальное количество слов в хранилище предложений, либо указать количество слов в предложениях в виде коллекции и получить max, min (и, в конечном счете, среднее значение) posteriori.
Явно: измените соответствующие строки в main методе на
Но это работает только в том случае, если результат getNbSentences никогда не превышает 1 (что будет подразумеваться тем, что входной аргумент является словом).
Обратите внимание, что реализация метода getNbSentences может быть getNbSentences в случае знаков приостановки: метод возвращает 3 в этом случае.
Читайте также: