Arma 3 Scripting

Command in System

preprocessFileLineNumbers

Also available as Markdown and JSON, or read the original wiki page.

Description

Returns the preprocessed content of the given file. The preprocessor is C-like, it supports comments using /* */ and PreProcessor Commands. The preprocessor also adds a default debug entrypoint for compiler at the begining of script: 1. line 1 "aFilename"

The #line keyword can be used in any script that are not preprocess, or with preprocess script with extra macro to protect reserverd sharp character. The format is:

**#line** <number> "<name>"

followed by new line. <number> could be only positive integer and <name> could be any name. This will be used only if an error occurs in the script. The error will contain the line: File <filename>, line <linenumber>

where <filename> will be the <name> you set and <linenumber> will be <number> + how many lines it is from the #line line. If the error happened on the line right under #line it will add 0 to <number>, if on second line, it will add 1 etc.

It is possible to use more than one #line keywords, but it seems having just one at the top for little script is enough to pinpoint position of the error easily.

Warning

If the file you are loading is not prepared using UTF-8 encoding and contains some characters with codes > 127, they might convert incorrectly

Syntax

preprocessFileLineNumbers fileName

Parameters:

Returns: String - file content containing 1. line 1 "aFilename"

Examples

Example 1

_string = preprocessFileLineNumbers "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"

Result is:

#line 1 "A3\ui_f\scripts\IGUI\RscUnitInfo.sqf"

disableserialization;

........

See also

fileExists · preprocessFile · loadFile · Function · SQF Syntax · call · spawn · execVM · PreProcessor Commands

Community notes

Killzone_Kid

The main difference between preprocessFile and preprocessFileLineNumbers is that the latter adds #line keyword to the target file, which allows to log the LINE error happened at and the FILE error happened in.

code34

The #line directive get's removed from the output.

So to add a custom #line directive before while using preprocessFileLineNumbers, you have to use a preprocessor macro like this:

#define DEBUG(sharp,name) sharp##line 0 name

and add this at the right place in your code

DEBUG(#,"your filename");

This way you can have custom filenames in error messages.