Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
|
|
Thread Tools | Search this Thread | Display Modes |
|
4th September 2021, 14:25 | #1 | Link |
Registered User
Join Date: Mar 2014
Posts: 38
|
How can I read a string value from a text file and assign it to a variable?
Unfortunately Avisynth script can't accept parameters, as far as I know. Currently I try to use environment variables, and a plugin from stickyboy, to make my script more flexible by parameterizing some variables. It would be better and more flexible to read the value(s) from a text file. This is a quite simple task in every programming language, but seems impossible in avisynth. Is it possible? How can I do that?
I found command "conditionalreader", but as far as I can tell, the variable can be used only in "scriptclip" calls. |
4th September 2021, 19:41 | #3 | Link | |
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,018
|
from RT_Stats,
Code:
RT_ReadTxtFromFile(String ,Int "Lines"=0,Int "Start"=0) Non-clip function. String Filename, Name of text file to load into a string. Lines=0=unlimited. Set to number of leading lines in text file to load, eg 1 = load only the first line of text file. The return string is n/l ie Chr(10) separated, and carriage returns are removed from the returned string. If source file was missing newline on very last line, it will append a newline so that all lines are similarly formatted. v1.03, Added Start arg default=0=very first line (relative 0). Would have been nice to have start and lines in reverse order but implemented as above to not break scripts. Throws an error if your requested Start is >= to the number of lines in the file, or zero len file. To fetch the last line of a text file, use eg Start = RT_FileQueryLines(Filename) - 1 (Start is zero relative). You could eg get the last line of a d2v file which might look like this:- "FINISHED 100.00% VIDEO" Code:
RT_TxtWriteFile(String,String,bool "append"=false) Non-clip function. The first arg is a string of text that you want to write to a file. The second arg is the output filename. Returns the number of lines written or -1 if file error, cannot open or write error. An empty write string ("") would return 0 unless newline terminated [chr(10)]. Append, if true appends to existing file. NOTE, the return value does NOT include any already existing lines if append is true. (use RT_FileQueryLines to inquire total number lines when append = true). Code:
RT_WriteFile(String FileName, string format, dat1, ... , datn, bool "Append"=False) Writes a formatted string to FileName file. The unnamed 'format' string and optional unnamed 'dat' args are used to construct the text string that is written, uses C/CPP printf() style formatting. Format: compulsory string controlling format and describing the datn type args that are expected. datn: Variable number of data args of any type (excluding clip). Append, Default False, optional and MUST be supplied with name (eg Append=True) as we do not know where optional data args end, Appends to file if already exists, else opens new FileName. printf Format spec here:- http://msdn.microsoft.com/en-us/library/56e442dc%28v=vs.71%29.aspx NOTE, the only support for printing Bool variables is %s as string, ie prints "True" or "False". Formatting supported %[flags] [width] [.precision] type flags, one of "-,+,0, ,#" width, integer, "*" supported (width supplied via dat arg). Precision, integer, "*" supported (precision supplied via dat arg). type, "c,C,d,i,o,u,x,X", Integer type, c,C=character, d,i=signed, o,u,x,X=unsigned (o=octal, x=Hex). "e,E,f,g,G", Floating point type "s,S", String type (also Bool). Formatting Insertion point is marked with '%' character in the format string (as in Avisynth String function), if you wish to use a percent character within the output string, it should be inserted twice in the format string ie '%%' will produce a single '%'. The data datn arg strings do not require a double '%' character. A Backslash character '\' introduces escape sequences, to insert a backslash character itself, you must supply a double backslash sequence ie '\\'. Converts embedded escape character sequences (Case Significant):- '\\' Converted to '\' Single Backslash '\a' Converted to Chr(7) '\b' Converted to Chr(8) '\t' Converted to Chr(9) '\n' Converted to Chr(10) NewLine '\r' [and Chr(13)] Converted to Chr(10) NewLine '\v' Converted to Chr(11) '\f' Converted to Chr(12) '\x', where x is ANY OTHER CHARACTER not included above, will be copied verbatim, ie '\x'. Escape sequences are replaced only when occurring in the format string, if you need escapes in data string then use RT_String. Example: RT_WriteFile(FileName,"Hello there %s and %s.\nGoodbye %d.","Fred","Ted",2013,Append=False) Code:
RT_FileFindStr(String FileName,string FndS,bool "Sig"=True,int "Pos"=1,int "Start"=0,int "Lines"=0) Finds unnamed string 'FndS' in 'FileName' text file, starting at line 'Start' and searching 'Lines' number of text lines. FileName: Name of a file containing text to search. FndS: is a string and will be considered terminated early at the first carriage return [Chr(13)] or newline [Chr(10)], carriage returns and newlines will not be findable using this function. Sig: Default=True, does case significant comparison, insignificant if false. Pos: Default=1, is the character start position in an individual line of text to start searching for the FndS string. Allows you to skip search on first Pos-1 characters within all lines of text. If Pos less than 1, then will return -ve number (usually -1), Not Found. Start: Default 0, is the 0 relative starting line where the searching begins in the text file. Lines: Default 0(all lines). Number of lines text to seach, starting at 'Start' line. A -ve return is 'Not Found'. On success returns the line number of the first instance of a found string in the Start and Lines range of lines. An empty "" FndS will always return -ve result, ie Not Found. see RT_FileQueryLines, to inquire number lines in a text file. see RT_ReadTxtFromFile to extract a range of lines from a text file. NOTE, Character position 'Pos' is 1 relative whereas multi-line line 'Start' index is 0 relative. Care must be taken if mixing RT_FindStr and RT_TxtFindStr or RT_FileFindStr, RT_FindStr returns 0 on error, the other two return -ve on error(0 denoting valid line zero). Code:
RT_TxtQueryLines(String) Non-clip function. String, the multiline string that you require a line count from. Returns the number of Newline [Chr(10)] separated lines in a multiline string. The last line does not have to be Chr(10) terminated, it still counts. RT_TxtGetLine(String, Int "Line"=0) Non-clip function. Extract a single line from a multiline Newline[Chr(10)] separated string. Default=0 == first line. The Line index is Zero Relative like frame number versus FrameCount. The returned string has trailing Newlines and carriage returns stripped from it. Throws an error if your requested line is >= to the number of lines in the multiline string. EDIT: To Print contents of multiline text file on frame: Code:
AVISource("D:\AVS\TEST.AVI") S=RT_ReadTxtFromFile("test.txt") Scriptclip("""RT_Subtitle("%s",S,align=5,vcent=True)""") return last Code:
AVISource("D:\AVS\TEST.AVI").ConvertToRGB32() S=RT_ReadTxtFromFile("D:\avs\avi\test.txt") DELAY=100 Scriptclip("""RT_Subtitle("%s",S,align=5,y=height+DELAY-current_frame,expy=true)""") Quote:
EDIT: Test.txt Code:
line1 line2 the quick brown fox my helicopter is full of eels. line5 Code:
BlankClip(Width=320,height=240) FN=".\Test.txt" Assert(Exist(FN),"Must have existing file") AllFileString = RT_ReadTxtFromFile(FN, Lines=0, Start=0) # all lines, and from beginning Lines = RT_TxtQueryLines(AllFileString) # Number of lines in multi-line string For(i=0,Lines-1) { S = RT_TxtGetLine(AllFileString,Line=i) Subtitle(String(i,"%.0f] ")+S, y=i*20) }
__________________
I sometimes post sober. StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace "Some infinities are bigger than other infinities", but how many of them are infinitely bigger ??? Last edited by StainlessS; 4th September 2021 at 20:24. |
|
Tags |
environment, file, parameter, string, variable |
Thread Tools | Search this Thread |
Display Modes | |
|
|