Jump to content

Adding Text


Go to solution Solved by BrewManNH,

Recommended Posts

Can't you add this information at the end of the file? Or in a second file with the same name but a different filetype? Or in a ADS?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Can't you add this information at the end of the file?

Yes, I can, but still I would like to know if there is a way....

Or in a ADS?

Would you mind expanding "ADS"?

TD :)

EasyCodeIt - A cross-platform AutoIt implementation - Fund the development! (GitHub will double your donations for a limited time)

DcodingTheWeb Forum - Follow for updates and Join for discussion

Link to comment
Share on other sites

Alternate Data Streams. A feature of the NTFS filesystem.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

As long as it is NTFS you are fine.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

I do not think ADS survives transport from one disk to another does it?

If transferred internally using 2 hard-disk in the same system with NTFS file system being used in both hard-disks, It will survive....

(Or a USB formatted in NTFS would carry the file safely :))

EasyCodeIt - A cross-platform AutoIt implementation - Fund the development! (GitHub will double your donations for a limited time)

DcodingTheWeb Forum - Follow for updates and Join for discussion

Link to comment
Share on other sites

ADS is ignored "when the file is copied or moved to another file system without ADS support, attached to an e-mail, or uploaded to a website."

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Here is a VERY simple way to add something to the start of a text file.

#include <FileConstants.au3>
$sFilename = @ScriptDir & "\Test.txt"
$hFile = FileOpen($sFilename, 2) ; create new file
For $I = 1 to 10000
    FileWriteLine($hFile, "Line: " & $I) ; create 10,000 lines of text
Next
FileClose($hFile) ; close the file

; Only this part is needed to add something to the start of the file, the top part is just to create the test file.

$hFile = FileOpen($sFilename, 1) ; open file for append
FileSetPos($hFile, 0, $file_begin) ; move the file pointer to the start of the file
FileWriteLine($hFile, "I am line No. 1 now :P") ; write the line to the file
FileWriteLine($hFile, " "); write a blank line to the file
FileClose($hFile)

It never reads the file itself, so it doesn't matter how large it is.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

When file was created:

Line: 1
Line: 2
Line: 3
Line: 4
Line: 5
Line: 6
Line: 7
...

 

After the script has ended:

I am line No. 1 now :P
 
Line: 4
Line: 5
Line: 6
Line: 7

...

 

So it doesn't insert lines but simply overwrites them.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Writing 5 years worth of log into a single file is extremely unwieldy. How about getting Cygwin and writing an awk or perl oneliner to divide the logfile into multiple files, say per day or per month? Or even make an autoitscript to do that? IMHO that would be a much better use of your time.

If I were you, I would go looking for a way to have the base application rotate its logfiles and/or reconfigure the logging properties. If not possible, plan B would be to write some sort of daily repeating operation (like a cronjob) to rename the logfile to another name (logfile.<date> comes to mind) as a sort of deus-ex-machina log rotation mechanism. Don't know if there's enough letters in the alphabet to assign a 5-years-old-but-still-active logfile a plan letter :)

Roses are FF0000, violets are 0000FF... All my base are belong to you.

Link to comment
Share on other sites

TheDcoder, did you even bother looking at the two links I posted?

If Not FileExists(_CygwinDir()) Then ;if cygwin directory doesnt exist on system drive
    MsgBox(16, 'Error', 'Please install Cygwin [http://cygwin.com/install.html]')
    Exit
ElseIf Not FileExists(_CygwinDir() & '\bin\ed.exe') Then ;if ed.exe doesn't exist
    MsgBox(16, 'Error', 'Please ensure ed package for Cygwin is installed - it is located under Editors in the Cygwin installer [http://cygwin.com/install.html].')
    Exit
EndIf

$sFilename = _CygwinDir() & '\home\' & @UserName & '\test.txt'
$hFile = FileOpen($sFilename, 2) ; create new file
For $i = 1 to 10000
    FileWriteLine($hFile, "Line with some text: " & $i) ; create 10,000 lines of text
Next
FileClose($hFile) ; close the file

$myfile = 'test.txt'
$command = "ed -s "&$myfile&" << 'EOF'"&@CR&"0a"&@CR&"prepend these lines"&@CR&"to the beginning"&@CR&"."&@CR&"w"&@CR&"EOF"

$cygwin = ShellExecute(_CygwinDir() & '\Cygwin.bat') ;run cygwin
$hWnd = WinWaitActive('~') ;wait for console
ControlSend($hwnd, "", "", $command) ;send ed command
ControlSend($hwnd, "", "", "{ENTER}") ;execute command
Sleep(1000)
WinKill($hWnd)
MsgBox(0, 'Done', "Ta-Da!")
ShellExecute(_CygwinDir() & '\home\' & @UserName & '\') ;open the home directory

Func _CygwinDir()
    Local $CygwinDir
    Switch @OSArch
        Case "X86"
            $CygwinDir = "\cygwin"
        Case "X64"
            $CygwinDir = "\cygwin64"
    EndSwitch
    $systemdrive = EnvGet('systemdrive')
    Return $systemdrive & $CygwinDir
EndFunc

That's one way of doing it.

I'm sure its also doable without having the cygwin window visible (probably by just passing command as an argument) but it is beyond my autoit/programming skills.

Edited by mpower
Link to comment
Share on other sites

TheDcoder, did you even bother looking at the two links I posted?

Sorry mpower, When I saw the word "cygwin" my mind instantly ignored your post... Although your idea works but installing cygwin is a burden in itself. I need a more simple & universal way of doing it, hope you don't mind my ignorance or rude kind of behavior :)

Your work is greatly appreciated :)

TD :D

EasyCodeIt - A cross-platform AutoIt implementation - Fund the development! (GitHub will double your donations for a limited time)

DcodingTheWeb Forum - Follow for updates and Join for discussion

Link to comment
Share on other sites

  • Solution

Sorry about the post above, lack of proper testing on my part. This script will not overwrite the text in the file, but will add the new text above it.

;~ #include <FileConstants.au3>
#include <File.au3>
$sFilename = @ScriptDir & "\Test.txt"
$hFile = FileOpen($sFilename, 2) ; create new file
For $I = 1 To 10000
    FileWriteLine($hFile, "Line: " & $I) ; create 10,000 lines of text
Next
FileClose($hFile) ; close the file

; Only this part is needed to add something to the start of the file, the top part is just to create the test file.
$hFile1 = FileOpen(@ScriptDir & "\Dummy.txt", 2) ; create dummy file, can be deleted later in the script or reused for other files
FileWriteLine($hFile1, "I am line No. 1 now :P ") ; write the line to the file
FileWriteLine($hFile1, " ")
FileClose($hFile1) ; close the file
RunWait(@ComSpec & " /c copy /b " & @ScriptDir & "\Dummy.txt + " & $sFilename & " " & @ScriptDir & "\test1.txt", "", @SW_HIDE) ; copy the dummy file to the top of the text file and create a new temp file
FileMove(@ScriptDir & "\test1.txt", $sFilename, $FC_OVERWRITE) ; overwrite the original file with the temp file, deleting the temp file

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

 

Sorry about the post above, lack of proper testing on my part. This script will not overwrite the text in the file, but will add the new text above it.

;~ #include <FileConstants.au3>
#include <File.au3>
$sFilename = @ScriptDir & "\Test.txt"
$hFile = FileOpen($sFilename, 2) ; create new file
For $I = 1 To 10000
    FileWriteLine($hFile, "Line: " & $I) ; create 10,000 lines of text
Next
FileClose($hFile) ; close the file

; Only this part is needed to add something to the start of the file, the top part is just to create the test file.
$hFile1 = FileOpen(@ScriptDir & "\Dummy.txt", 2) ; create dummy file, can be deleted later in the script or reused for other files
FileWriteLine($hFile1, "I am line No. 1 now :P ") ; write the line to the file
FileWriteLine($hFile1, " ")
FileClose($hFile1) ; close the file
RunWait(@ComSpec & " /c copy /b " & @ScriptDir & "\Dummy.txt + " & $sFilename & " " & @ScriptDir & "\test1.txt", "", @SW_HIDE) ; copy the dummy file to the top of the text file and create a new temp file
FileMove(@ScriptDir & "\test1.txt", $sFilename, $FC_OVERWRITE) ; overwrite the original file with the temp file, deleting the temp file

This takes the cake, well done! I stand corrected, cygwin is not needed after all :P 

I thought your solution might have problems with larger files but after testing on a ~140mb file with 10,000,000 lines it took only 0.2 seconds to prepend the lines. I am confident it will work with much larger files without any issues also.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...