Как удалить последнюю строку заметки в evernote? - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу удалить последнюю строку каждой заметки в evernote.Это легко сделать с помощью сценариев оболочки, например, используйте wc, чтобы получить длину заметки, а затем используйте head, чтобы напечатать все строки, кроме последней, или с помощью sed.Но я не могу найти способ передать содержимое заметки в оболочку.Я пробовал это (и многие другие)

do shell script "echo <<<" & noteText

Есть идеи?

Вот весь сценарий

tell application "Evernote"
set noteList to find notes ""
repeat with i from 1 to number of items in noteList
    set this_note to item i of noteList
    set this_note_text to ENML content of this_note
    my removeLastLine(this_note_text)
end repeat
end tell

on removeLastLine(note)
set countCmd to "wc <<< " & note
(* do shell script countCmd *)
set noteText to note as string
log noteText
do shell script "echo <<<" & noteText
(* set newNote to do shell script "head -(size - 1)" *)
end removeLastLine

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

ОК, вот мое решение, использующее HTML-код Evernote Note .
ВНИМАНИЕ: Любые изображения или вложения в Note могут быть потеряны.

При условии, что это HTML-кодПримечание:

<div id="en-note"><div>2019-02-02  21:47 GMT-6</div><div><br/></div><div>REF:  <a href="/11373238/kak-udalit-poslednyy-stroku-zametki-v-evernote">How can I remove the last line of a note in evernote?</a></div><div><br/></div><div>This is a test.</div><div><br/></div><ol><li>One</li><li>two</li><li>three</li></ol><div><br/></div><div>This is the last line where X&gt;Y, A&lt;B, and a path of /dir1/dir2/file.text.<br/></div></div>

Этот AppleScript удалит последнюю строку пользователя.
ПРИМЕЧАНИЕ. Я все еще тестирую RegEx для этого, поэтому это следует рассматривать как БЕТА / ПРОЕКТ версию.Но это должно быть достаточно для начала работы.

Пожалуйста, дайте нам знать, если это работает для вас, или у вас есть вопросы / проблемы.

property ptyScriptName : "Remove Last User Text Line from Evernote Note"
property ptyScriptVer : "1.0"
property ptyScriptDate : "2019-02-03"
property ptyScriptAuthor : "JMichaelTX"

use AppleScript version "2.5" -- El Capitan (10.11) or later
use framework "Foundation"
use scripting additions

--- RegEx to Find Last User Text Line ---
## (<div>(?!.+?<div>).+?<\/div>)(<\/div>)$
set reFind to "(<div>(?!.+?<div>).+?<\\/div>)(<\\/div>)$"


tell application "Evernote"
  set noteList to selection
  set oNote to item 1 of noteList
  set bodyHTML to HTML content of oNote

  set bodyNewHTML to my regexChange(reFind, "", bodyHTML)
  set HTML content of oNote to bodyNewHTML
end tell


--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
on regexChange(pFindStr, pReplaceStr, pSourceStr) -- @RegEX @Change @Replace @Strings @ASObjC
  --–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  (*  VER: 2.0    2018-07-06
    PURPOSE:  Change ALL Occurances of pFindStr into pReplaceStr in pSourceStr
    METHOD:    Uses ASObjC RegEx (which is based on ICU Regex)
    PARAMETERS:
      • pFindStr    | text |  RegEx Pattern to Find
      • pReplaceStr | text |  Replace string which
          • May contain these RegEx MetaChars:  
                \\n, \\r, \\t for linefeed, return, and tab
                $<CG>, where <CG> is Capture Group number
      • pSourceStr   | text |  Source String to be searched

    RETURNS:  Revised String with all changes that were found.

    AUTHOR:  JMichaelTX -- with help from NigelGarvey
    ## REQUIRES:  use framework "Foundation"
    REF:  
      1.  2018-07-06, NigelGarvey, Late Night Software Ltd.
          ASObjC RegEx Change Handler
          http://forum.latenightsw.com/t/asobjc-regex-change-handler/1395/10
      2.  ICU RegEx Users Guide
          http://userguide.icu-project.org/strings/regexp
  --–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  *)
  set nsCurApp to current application

  -- Replace any backslash-n sequences in the replace string with actual character --

  set nsReplaceStr to nsCurApp's NSString's stringWithString:pReplaceStr
  set nsReplaceStr to nsReplaceStr's stringByReplacingOccurrencesOfString:"\\n" withString:(linefeed)
  set nsReplaceStr to nsReplaceStr's stringByReplacingOccurrencesOfString:"\\r" withString:(return)
  set nsReplaceStr to nsReplaceStr's stringByReplacingOccurrencesOfString:"\\t" withString:(tab)

  set nsSourceStr to nsCurApp's NSString's stringWithString:pSourceStr

  set nsSourceStr to (nsSourceStr's stringByReplacingOccurrencesOfString:pFindStr withString:nsReplaceStr options:(nsCurApp's NSRegularExpressionSearch) range:{0, nsSourceStr's |length|()})

  return nsSourceStr as text

end regexChange
--~~~~~~~~~~~~~~~~~~~~ END of Handler ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 голосов
/ 03 февраля 2019

Это НЕ решение.Это руководство / предложения, которые не вписываются в строку комментария.

Ваша задача намного сложнее, чем может показаться. Вам нужно решить две основные задачи:
(1) Удаление последней строки пользовательского текста (в отличие от последней строки текста ENML)
(2) Обновление существующего примечания ENML.

#1 можно преодолеть.Последняя строка текста ENML содержит теги XML, которые вы НЕ хотите удалять.Это НЕ то же самое, что последняя строка пользовательского текста, которую вы просматриваете в приложении Evernote.Вот пример текста ENML, который имеет 3 строки текста.Последняя пользовательская строка встроена в последнюю строку ENML, в которой есть несколько тегов.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note><div>2019-02-02  21:47 GMT-6</div><div><br/></div><div>This is a test.</div><div><br/></div><div><ol><li>One</li><li>two</li><li>three</li></ol><div><br/></div></div><div>this is the last line.</div><div><br/></div></en-note>

#2 - огромная проблема.Вы можете изменить HTML примечания, но НЕ ENML примечания посредством сценариев.И HTML не будет содержать ссылки на встроенные изображения и вложения.Единственный обходной путь, который я видел, - это редактирование фактического файла, похороненного в папках данных Evernote в папке ~/Library/Application Support/com.evernote.Evernote (известной как «папка базы данных Evernote»).OTOH, если вы хотите создать новую заметку, используя измененный текст ENML, то это легко сделать.Откройте Evernote Scripting Dictionary из редактора сценариев, чтобы увидеть, что доступно.

Если вы просто хотите создать НОВУЮ заметку, обновите свой вопрос, чтобы указать ее.

Если завтра у меня будет больше времени, я проведу дополнительное исследование.


ОБНОВЛЕНИЕ 2019-02-03 18:17 GMT-6

Так что теперь ОП заявил, что он может работать только с использованием HTML.Итак, вот пример HTML из EN Note

<div id="en-note"><div>2019-02-02  21:47 GMT-6</div><div><br/></div><div>REF:  <a href="/11373238/kak-udalit-poslednyy-stroku-zametki-v-evernote">How can I remove the last line of a note in evernote?</a></div><div><br/></div><div>This is a test.</div><div><br/></div><ol><li>One</li><li>two</li><li>three</li></ol><div><br/></div><div>this is the last line.</div><div><br/></div></div>

Последняя строка USER:
This is a test.

Проблема в том, что после этой строки могут быть другие нетекстовые элементы передfinal </div>

Сейчас я работаю над RegEx.Если кто-нибудь из вас, гуру RegEx, найдет решение для этого, пожалуйста, прыгайте. Жаль, что мы можем использовать для этого веб-страницу DOM.Это было бы намного проще, чем RegEx.

...