Cut first line from notepad

Creating macros. Working with QM.

Cut first line from notepad

Postby ilya1111 on Wed Jul 05, 2017 8:15 pm

Hello awesome support !
Qm is very good programm, but when I need to write code without using toolbar I be upset. Thank you for the help which you give me, people help each other so happens very seldom.
I try to write code for my task, but it has turned out just awfully. I won't place him here. If you want help me, I tried to use s.getsel([cut] [format] [control]) for cut from notepad first line (withou opening) to clip board, and delete empty first line.
Like this I need...
We have file with different numbers in different lines (for example 1234):
--------------
1
2
3
4

IF I start macro one time- first line cut, after cut file save, and if we open file we have
-------------
2
3
4
and we have 1 in clipboard

I start macro second time, and we have in file
-------------
3
4
( 2 in clipboard )

I want to bring benefit to you. how I am able to do it?
Thx!
ilya1111
 
Posts: 16
Joined: Wed Feb 15, 2017 1:39 pm

Re: Cut first line from notepad

Postby Gintaras on Thu Jul 06, 2017 4:01 am

For it you'll need to learn Quick Macros string functions, such as find, str.get, str.remove. Look in the help file.
Gintaras
Site Admin
 
Posts: 10282
Joined: Thu Dec 19, 2002 7:36 pm
Location: Lithuania

Re: Cut first line from notepad

Postby ilya1111 on Thu Jul 06, 2017 8:51 pm

I tried to use your help-post, but it has turned out here that

str s.getfile("C:\Users\User\Desktop\1.txt")
int i
s.getl(s -i)
s.setclip
s.remove(0 999)

to copy the first line is work. But not delete first line and to keep changes in the text file with removed line. How I am able to do it? help please.
ilya1111
 
Posts: 16
Joined: Wed Feb 15, 2017 1:39 pm

Re: Cut first line from notepad

Postby r0n on Fri Jul 07, 2017 3:28 pm

Function Macro19     ?
;;********************************************************
;;*
;;*
;;* 2 examples about getting a line.
;;* Example 1, get FIRST LINE
;;* Example 2, get THIRD LINE
;;*
;;*
;;********************************************************
;;
;Assuming '1.txt' contains:
;abc
;def
;ghi

;; EXAMPLE 1
str s="$desktop$\1.txt" ;; This is the path to the desktop
str get_text.getfile(s) ;; variable 'get_text' contains the contents of the path in 's'
str first_line.getl(get_text 0)
first_line.setclip ;; put the 'first_line' into clipboard
out first_line


;; EXAMPLE 2 (uses integer variable 'i' to set which line to grab, '2' means 'THIRD' line! ('getl' uses ZERO index, meaning first item = 0 (0,1,2,...))
int i=2
get_text.getfile(s)
str third_line.getl(get_text i)
third_line.setclip
out third_line

;; To GET the clipboard contents
str geclipboard.getclip
out geclipboard


;; If you do NOT understand below explanation, then just do this
;; str s="C:\Users\User\Desktop\1.txt"

;; $desktop$ , is special folder indication for the desktop path in windows
;; if you execute the below, it will output THE FULL ABSOLUTE path of your desktop location:

;;---------
;; str s="$desktop$\1.txt"
;; s.expandpath
;; out s
;;---------

;; Then below in the output pane the FULL path to the desktop will be displayed.
;; You do not have to execute the command "s.expandpath" if you use $-paths
;; only if you need to see/use the full absolute path. QM can process $-paths without having
;; to use .expandpath. BUT YOU MUST USE EXISTING $-paths

;; To see other existing $-Paths which can be used in QM, above in QM in the toolbar
;; in the top right toolbar with pen/hand icon click the 6th icon 'folder with spyglass icon'
;; if you hover over it, shows 'Files/web' click on it, select FIRST item 'Run program',
;; a dialog appears. In the top of that dialog you see a button called 'SF' (somewhere at th top left)
;; click on it and you see all the special folders.
;; If you select 'Cookies' for example, it will fill in the inputfield '$Cookies$\' NOTE THE ENDING BACKSLASH

;; This handy when you compile your macro/function to .exe and then use it on other pc
;; If other pc has different Desktop path, using $Desktop$ will always correctly resolve to
;; correct Desktop path.

;; You can DRAG a textfile into the QM editor and it will automatically create the 'run ...' command
;; and if you drag from a location that has a special folder ($-folder) associated with, in this example
;; you could DRAG the '1.txt' file into the QM editor, it will automatically place: run "$desktop$\1.txt"

r0n
Active Member
 
Posts: 478
Joined: Tue Jul 24, 2012 5:47 am

Re: Cut first line from notepad

Postby r0n on Fri Jul 07, 2017 3:29 pm

Macro Macro21     ?
;;********************************************************
;;*
;;*
;;* To remove a line, do the following 2 steps
;;*
;;*
;;********************************************************


;STEP 1
;==========================

;If '1.txt' contains
;ABC
;DEF
;GHI

;Assume QM 'sees' it like this
;'ABC[]DEF[]GHI'
;Each [] represents a newline.
;
;A is postion 0, B is position 1,...etc....

;A B C [ ] D
;0 1 2 3 4 5

;
;If we want to remove SECOND line, first find out at which position
;the second line begins, in this example it begins at 'D' which is the 5th position from the left
;Note that the '[' and ']' are also counted starting from 0.
;
;If you run the code below it will output '5'
;;
str s="$desktop$\1.txt"
str get_text.getfile(s)
str getline
int line_pos=getline.getl(get_text 1) ;; '1' means SECOND LINE, here we put the position of line 2 in variable 'line_pos'
out line_pos ;; This should output 5

;STEP 2
;==========================
;Now you can use str.remove
;If you want to remove line 2
get_text.remove(line_pos getline.len)
out get_text


;The .remove function removes starting from 'line_pos' (which is 5) and then removes a specified number of characters
;in this example the amount of characters that is in line 2. Line 2 is stored in 'getline', 'getline.len' is the
;amount of characters in 'getline'


r0n
Active Member
 
Posts: 478
Joined: Tue Jul 24, 2012 5:47 am

Re: Cut first line from notepad

Postby r0n on Fri Jul 07, 2017 3:34 pm

I assume because of the amount of work must be put in, in the next version of QM Gintaras can not explain everything regarding the basic functions, some things require some extensive research/trial and error (best way to learn!)
My explanation might not be the best way but it might be a start.

Note that on the forum there is an string function str.RemoveLine, found here: http://quickmacros.com/forum/viewtopic.php?t=597
But before using pre made functions maybe it is best to try to approach this using existing member functions if you are starting QM.
If you understand those basic member functions then you can try to use the functions on the QM forum.
r0n
Active Member
 
Posts: 478
Joined: Tue Jul 24, 2012 5:47 am

Re: Cut first line from notepad

Postby ilya1111 on Fri Jul 07, 2017 7:53 pm

Huge thanks to you r0n for your post! Your explanations for me more clear than the text from ContextHelp. I understand that it is does not matter how many symbols in the line, QM will count everything of them
Can you to prompt me, if I need to edit the file 1.txt , by your code, from №1 to №2 how it wil be look?
№1
ABC
DEF
GHI

A B C [ ] D E F [ ] G H I
0 1 2 3 4 5 6 7 8 9 10 11 12

№2
DEF
GHI
D E F [ ] G H I
0 1 2 3 4 5 6 7
I need to use code like this

str s="$desktop$\1.txt"
str get_text.getfile(s)
str getline
int line_pos=getline.getl(get_text 0) ;; '0' and we have first LINE,'
out line_pos ;; This should output 0

get_text.remove(line_pos getline.len)
;;* and somehow to delete empty line in "memory" and save new text (without empty line) in file
ilya1111
 
Posts: 16
Joined: Wed Feb 15, 2017 1:39 pm

Re: Cut first line from notepad

Postby r0n on Fri Jul 07, 2017 8:33 pm

Macro Macro22     ?
str s="$desktop$\1.txt"
str get_text.getfile(s)
str getline
int line_pos=getline.getl(get_text 0) ;; CHANGE THE NUMBER HERE TO THE LINE YOU WANT TO GET, '0'= first line, '1' = second line...etc...
get_text.remove(line_pos getline.len)
get_text.trim ;; trim removes leading and trailing spaces, (put cursor on "trim" in QM editor then press [F1])
out get_text

;; At line 4 you see '0' this means GET the line at line '0' (FIRST LINE!), we store it in 'getline'
;; At line 5 you remove the exact length (amount of characters) of 'getline', we remove starting at 'line_pos' which should be '0'
;; line_pos will be '0' at 'A' and this will be put into variable 'line_pos' at line 4, do NOT confuse this with the zero in .=> getl(get_text 0)



It is confusing in beginning, keep re-studying the examples (in this forum thread and the help file). You will get it.
r0n
Active Member
 
Posts: 478
Joined: Tue Jul 24, 2012 5:47 am


Return to General

Who is online

Users browsing this forum: No registered users and 3 guests