Author: Rory Nolan
Date: 2024-02-11

# Files

#### Rory Nolan

#### 2024-02-11

Here are some useful things which `filesstrings` makes easier than `base` or `fs`.

First let’s load the library:

    library(filesstrings)

    #> Loading required package: stringr

## Remove spaces from file names

“A space in your file name is a hole in your soul.” - Jenny Bryan

`remove_filename_spaces(replacement = "_")` replaces them all with underscores for all files in a directory. By default, they are replaced with nothing.

    file.create(c("file 1.txt", "file 2.txt"))

    #> [1] TRUE TRUE

    remove_filename_spaces(pattern = "txt$", replacement = "_")

    #> 2 files required renaming and this was done successfully.

    list.files(pattern = "txt$")

    #> [1] "file_1.txt" "file_2.txt"

    file.remove(list.files(pattern = "txt$"))  # clean up

    #> [1] TRUE TRUE

## Messed up file numbering

The microscope I use numbers files with 3 numbers by default, i.e. `file001.tif`, `file002.tif` and so on. This is a problem when the automatic numbering passes 1000, whereby we have `file999.tif`, `file1000.tif`. What’s the problem with this? Well, sometimes you need alphabetical order to reflect the true order of your files. These file numbers don’t satisfy this requirement:

    file.names <- c("file999.tif", "file1000.tif")
    sort(file.names)

    #> [1] "file1000.tif" "file999.tif"

so `file1000.tif` comes before `file999.tif` in alphabetical order. The function `nice_nums()` returns the names that we’d like them to have:

    nice_nums(file.names)

    #> [1] "file0999.tif" "file1000.tif"

The function `nice_file_nums` applies such renaming to all the files in an entire directory. It wraps `nice_nums`.

## The name of a file without the extension

    before_last_dot("spreadsheet_92.csv")

    #> [1] "spreadsheet_92"

## Ensure that a file name has a given extension

Add a file extension if needed:

    give_ext("xyz", "csv")

    #> [1] "xyz.csv"

If the file name has the correct extension already, it’s left alone:

    give_ext("xyz.csv", "csv")

    #> [1] "xyz.csv"

Change a file extension:

    give_ext("abc.csv", "txt")  # tack the new extension onto the end

    #> [1] "abc.csv.txt"

    give_ext("abc.csv", "txt", replace = TRUE)  # replace the current extension

    #> [1] "abc.txt"