Passer au contenu principal

Remplacer une plage de lignes (LCC.web_file.set_range_lines)

Déclaration​

ok, replaced_or_err = LCC.web_file.set_range_lines(path, start_line, lines, timeout?)

Paramètres​

  • path
    Type chaîne, chemin du fichier cible
  • start_line
    Type numérique, numéro de départ ; les nombres positifs commencent à 1, les nombres négatifs comptent depuis la fin (-1 est la dernière ligne) et 0 désigne la position après la dernière ligne
  • lines
    Type table, tableau des nouvelles lignes
  • timeout
    Type numérique, facultatif ; délai d'attente de la demande en secondes, 60 par défaut

Valeurs de retour​

  • ok
    Type booléen ; renvoie true en cas de succès et false dans le cas contraire
  • replaced_or_err
    Type table ou chaîne ; en cas de succès, tableau du contenu des anciennes lignes remplacées ; description de l'erreur en cas d'échec

Description​

Remplace plusieurs lignes à l'emplacement indiqué.
Chaque chaîne vide du tableau représente une ligne vide, y compris à la fin ; par exemple, {"Nouveau contenu", ""} remplace deux lignes.
Un tableau vide {} ne contient aucune ligne de remplacement et se distingue d'un tableau contenant une chaîne vide {""}.
Les règles des numéros de ligne sont décrites dans les paramètres ci-dessus.
Si le numéro de départ dépasse le nombre de lignes existantes, complète automatiquement l'intervalle par des lignes vides.
Une réussite qui ne remplace aucune ligne existante renvoie une table vide {}.
L'ancien contenu renvoyé peut servir à la journalisation ou au retour arrière.

Associer lecture et écriture​

Lorsqu’un fichier se termine par un saut de ligne, get_lines conserve la chaîne vide issue du découpage à la fin. Par exemple, le texte de deux lignes "A\nB\n" renvoie {"A", "B", ""} ; passer ce tableau à set_range_lines(path, 1, lines) écrit trois lignes, dont la dernière est vide.

Pour lire et remplacer du contenu par numéro de ligne, associez get_range_lines à set_range_lines. Pour lire, modifier et écraser le fichier entier, associez get_lines à set_lines. set_lines écrase tout le fichier et ne convient pas aux remplacements partiels.

Dans les deux cas, la lecture et l’écriture sont des requêtes distinctes : la séquence complète de lecture, modification et écriture n’est donc pas atomique. En cas d’écritures concurrentes, coordonnez les accès pour éviter d’écraser des modifications effectuées après la lecture.

Exemple​

local ok, old_lines_or_err = LCC.web_file.set_range_lines("/配置/list.txt", 2, {"Beta", "Gamma"})
if ok then
print("原内容:", table.concat(old_lines_or_err, ","))
end