private static bool ParseNonIndexedTsvFile()

in src/common/details/named_values/parsers/for_each_token_parser.cs [125:182]


        private static bool ParseNonIndexedTsvFile(INamedValueTokens tokens, INamedValues values, string? token, int skip, int index)
        {
            // --foreach [tsv] @COL-TSV-FILE [skip header] in @TSV-FILE
            // --foreach [tsv] [columns] "COL1;COL2" [skip header] in @TSV-FILE

            if (token == "tsv") token = tokens.PeekNextToken(skip++);
            if (token == "columns") token = tokens.PeekNextToken(skip++);

            var skipHeader = false;
            if (tokens.PeekNextTokenValue(skip, values) == "skip" && tokens.PeekNextTokenValue(skip + 1, values) == "header")
            {
                skipHeader = true;
                skip += 2;
            }

            var columns = "";
            if (tokens.PeekNextTokenValue(skip, values) == "in")
            {
                skip++;
                columns = tokens.ValueFromToken(token);
                token = tokens.PeekNextToken(skip++);
            }
            else if (token == "in")
            {
                token = tokens.PeekNextToken(skip++);
            }

            if (token == null) return false;

            var hasHeader = string.IsNullOrEmpty(columns) || skipHeader;

            var atFile = token.StartsWith("@");
            var isList = !atFile && token.Contains(";");
            var isFile = !atFile && !isList && FileHelpers.FileExistsInDataPath(token, values);
            if (atFile || isList || isFile)
            {
                var value = isFile
                    ? FileHelpers.ReadAllText(token, Encoding.Default)
                    : tokens.ValueFromToken(token)!;
                if (isList)
                {
                    hasHeader = false;
                    value = value.Replace(";", "\n");
                }

                tokens.SkipTokens(skip);
                values.Add($"foreach.{index}.tsv.file", value);
                values.Add($"foreach.{index}.tsv.file.has.header", hasHeader ? "true" : "false");
                if (!string.IsNullOrEmpty(columns)) values.Add($"foreach.{index}.tsv.file.columns", columns);

                index++;
                values.Reset("foreach.count", index.ToString());

                return true;
            }

            return false;
        }