• Каким редактором для редактирования csv-файлов вы пользуетесь?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Если нужно именно работать с файлом, быстрее и удобнее Excel, думаю, ничего нет.
    Если нужно подправить что-то, например сменить кодировку, или добавить
    sep=,
    в начало файла, чтобы его Excel понимал, то Notepad++, т.к там есть макросы и замена текста по регуляркам.
    Ответ написан
    Комментировать
  • Как просуммировать с условием?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    В Google Sheets есть пару киллер-фич, а именно FILTER() и QUERY()
    Вам подойдёт первое (вводить в Лист2 B1, распространить вниз):
    =СУММ( FILTER(Лист1!B:B;Лист1!A:A<=A1) )
    Пояснение работы: берется Лист1!B:B, но не все, а только те, в которых Лист1!A:A<=A1. Что получится - суммируется.
    Ответ написан
    Комментировать
  • Как правильно писать регулярные выражения в google sheets?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Возможно, что нужно указать флаги в регулярном выражении (gmi). Если нет g флага, .match() возвращает только первое совпадение в виде массива, в котором совпадение находится по индексу 0.
    Ответ написан
    Комментировать
  • Можно ли в query использовать ссылку на ячейку?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Используйте ДВССЫЛ(), он же INDIRECT()
    =ДВССЫЛ("workdays_"&A1)
    Ответ написан
    1 комментарий
  • Как определить лидерство в матче?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    const totalTime = 90;
    const a = [12, 34, 56];
    const b = [45];
    
    let score = 0;
    let aWin = 0;
    let bWin = 0;
    let draw = 0;
    for (let i=0;i<totalTime;i++){
    score+=(a.indexOf(i)!=-1?1:0)-(b.indexOf(i)!=-1?1:0);
    aWin += score>0?1:0;
    bWin += score<0?1:0;
    draw += score==0?1:0;
    };
    console.log("a - " + aWin + " minutes");
    console.log("b - " + bWin + " minutes");
    console.log("a=b - " + draw + " minutes");
    Ответ написан
    3 комментария
  • Формулы 3д обектов?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Матрицы и линейная алгебра с ними связанная, используются для трансформации точек. Например, есть матрица, которая поворачивает вектор на определенный угол. Вектор(радиус-вектор), в данном случае, заменяет собой точку. Матрица, на которую надо умножить вектор (и получить другой вектор) - преобразование. Есть много всяких преобразований - проекции, вращения, масштабирование, перемещение и т.п.
    Можно всё это сделать примитивно с помощью формул школьной геометрии, но суть матриц - в том что такие операции могут быть вычислены на видеокарте, что гораздо быстрее.
    1) Углубиться в линейную алгебру - понятие векторов, матриц, преобразований матриц, умножение и т.п.
    2) Углубиться в геометрию, хватит школьного уровня - векторы и операции с ними.

    Если нужно "только нарисовать", то можно обойтись школьной математикой:
    Xпроекции = X*cos(xx) + Y*cos(xy) + Z*cos(xz)
    Yпроекции = X*cos(yx) + Y*cos(yy) + Z*cos(yz)

    ,где
    xx - угол между новой осью X и старой X (0)
    xy - угол между новой осью X и старой Y (90)
    xz - угол между новой осью X и старой Z (240)
    yx - угол между новой осью Y и старой X (-90)
    yy - угол между новой осью Y и старой Y (0)
    yz - угол между новой осью Y и старой Z (150)
    Углы в скобках - как пример, когда ось Z находится в 3 четверти под 45 градусов.
    Тогда:
    Xпроекции = X + Z*cos(xz)
    Yпроекции = Y + Z*cos(yz)

    Берите объект как массив точек (для начала куб например - 8 точек) и присваивайте сначала координаты XYZ, а потом пересчитывайте их по этой формуле и отображайте на экране. И всё будет работать.
    PS: в школе ещё, как только появились векторы, дошел до этих формул сам; пока выводил - исписал 12листовую тетрадку.
    Ответ написан
    Комментировать
  • Как сделать Excel (Calc) файл с формами и проверками?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Используйте условное форматирование, для каждой характеристики на каждую группу создайте правило.
    Главная - Условное форматирование - Создать правило... - Использовать формулу для определения форматируемых ячеек
    И там пишите что-то вроде:
    =ДВССЫЛ("RC2";0)="Фрукты"
    2 - номер столбца, который проверяем. Если в этом столбце есть "Фрукты", то ячейки в этой строке применят формат, который укажете в правиле.

    Но учитывая что тут получается перемножение множеств, то правил придётся сделать много. (10 категорий * 10 характеристик = 100 правил)
    Ответ написан
    1 комментарий
  • Как импортировать информацию с Google.Maps в Google Sheets?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Если получить данные по этому url, то видно, что изначально там информации нет, т.е. все полезные данные подгружаются JavaScript'ом. Если выкинуть всё лишнее, скрипты и стили, то возвращается такой код:
    <!DOCTYPE html>
    <html itemscope="" itemtype="http://schema.org/Place" lang="en">
    
    <head>
        <title> Google Maps </title>
    </head>
    
    <body class="keynav-mode-off" tabindex="-1">
        <noscript>
            <div id="no-script">
                <div class="no-script-message">
                    <div> When you have eliminated the <strong>JavaScript</strong>, whatever remains must be an empty page. </div> <a class="no-script-help-link" href="//support.google.com/maps/?hl=en&amp;authuser=0&amp;p=no_javascript" target="_blank"> Enable JavaScript to see Google Maps. </a>
                </div>
            </div>
        </noscript> 
    </body>
    
    </html>
    Ответ написан
    Комментировать
  • Как реализовать плавную смену значений цвета RGB свтодиода?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Всё верно сказали - тут HSV лучше всего подходит. Давным давно делал для паскаля функции, в той ветке на Си выложили подобное. Посмотрите, пригодится при реализации.
    Функции для преобразования RGB >> HSV
    Ответ написан
    Комментировать
  • Есть ли вариант кода без кода table?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Используйте IMPORTXML(), там есть XPATH, которым можно выудить любой элемент или группу элементов по любому условию.
    Ответ написан
  • Есть ли способ выгрузить данные из листа Google таблиц и выдать их с учетом того, кто их запрашивает?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    1) На каждую выгрузку сделать скрытый лист, и фильтровать туда формулой с FILTER() или QUERY(). 1лист=1пользователь
    2) Сделать Файл - Публикация в интернете для каждого технического листа - и раздать ссылки каждому пользователю.
    Ответ написан
    Комментировать
  • Как вместо формулы вставить строку в ячейку Google sheet?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Вместо
    cell.setFormula('=A1000+B1000 '+ str);
    пишите
    cell.setValue('=A1000+B1000 '+ str);
    Это как раз не применение формулы, а "просто строка", а точнее - значение.
    Ответ написан
    Комментировать
  • Как импортировать данные из текстового файла, который ежедневно сохраняется на Диск Гугл?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Сделайте функцию, повесьте её на триггер по времени (ежедневный). В функции:
    1) Открыть итератор файлов с определенным именем
    var fileIterator = DriveApp.getFilesByName(fileName);

    2) Получить содержимое файла(ов):
    while(fileIterator.hasNext()){
      var textFromFile = fileIterator.next().getAs(ContentService.MimeType.TEXT);
    };

    3) Записать данные куда нужно
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name).getRange(row, column).setValue(textFromFile );
    Ответ написан
    Комментировать
  • Как отправлять письма из google таблицы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    1) Получить данные из нужного диапазона
    var inData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1").getRange("A1:C").getValues();

    2) Отфильтровать по нужному email (для надёжности я тут бы ещё всё к нижнему регистру привёл)
    inData = inData.filter(row=>row[2]==="example@site.com");

    3) Собрать из остатков массива письмо и отправить с помощью MailApp.sendEmail(recipient, subject, body)
    Ответ написан
    Комментировать
  • Как составить формулу для суммирования столбца над ячейкой?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Вот так:
    =СУММ(ДВССЫЛ("R2C[0]:R[-1]C";0))
    Ответ написан
    Комментировать
  • Как сделать определенное количество шагов шаговиком в секунду?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    setMaxSpeed - это и есть "определенное число шагов в секунду", т.е. скорость
    А вместо
    stepper1.moveTo(position);
    в вашем случае лучше использовать
    stepper1.move (300);
    Ответ написан
    Комментировать
  • Чем заменить сборку Дарлингтона ULN2003A?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Есть сборки по 2 транзистора в разных корпусах(TSOP, QFN, SOIC) по 6/8 ног. Вполне можно набрать ими нужное кол-во каналов. Посмотреть ассортимент можно тут, например.
    Ответ написан
    Комментировать
  • Нужно ли подключать AVCC ATMEGA8?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Конкретно в Mega8 был баг - Vcc и AVcc замкнуты внутри контроллера
    И от AVсс работает PORTA.

    Вообще его лучше подключить напрямую к Vcc, если АЦП не используется,
    или же к Vcc через фильтр НЧ(дроссель последовательно + конденсаторы параллельно), если АЦП используется.

    Подробнее - тут, например
    Ответ написан
  • Как изменить пин для RTC3231?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Можно сделать программный I2C и повесить на любые ножки.
    Ответ написан
  • Как получить емэил, вносящего изменения в гугл таблицу?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Для простых триггеров наподобие onEdit и пользовательских функций недоступен объект user, в этом можно убедиться если сделать такой код:
    function onEdit(e) {
      SpreadsheetApp.getActiveRange().setValue(Utilities.formatString("email: %s",e.user.getEmail() ));
    }

    Но никто не запрещает сделать другую функцию и назначить ей триггер "При изменении" (Изменить - Триггеры текущего проекта - Добавление триггера - onEditTrigger - Основное развертывание - Из таблицы - При редактировании - Сохранить):
    function onEditTrigger(event) {
            var userEmail = event.user.getEmail();                  //Email пользователя
    	//Что-то делаем...
    };
    Ответ написан