Match isolated quotes across records

Share:

Description

Look for unmatched quotes in a character vector. If found, look for a matching quote starting the next characer string in the vector, possibly after a blank line. If found, merge the two strings and return the resulting shortened character vector.

Usage

1
matchQuote(x,  Quote='"', sep=' ', maxChars2append=2, ...) 

Arguments

x

a character vector to scan for unmatched Quotes.

Quote

the Quote character that should appear in pairs

sep

sep argument passed to paste to combine pairs of successive lines with unmatched quotes.

maxChars2append

maximum number of characters in the following string to concatonate two adjacent strings (possibly separated by a blank line) with unmatched Quotes.

...

optional arguments for gsub

Details

This function was written to help parse data from the US Department of Health and Human Services on cyber-security breaches affecting 500 or more individuals. As of 2014-06-03 the csv version of these data included commas in quotes that are not sep characters, quotes that are not matched, lines with zero characters, followed by lines with 3 characters being a quote and a comma. This function was written to drop the blank lines and append the quote-comma line to the preceeding line so it contained matching quotes.

Value

The input character vector possibly shortened with the following attributes explaining what was found:

  • unmatchedQuotes indices of the input x with an unmatched Quote.

  • blankLinesDropped indices of the input x that were dropped because they (1) followed an unmatched Quote and (2) contained no non-blank characters. quoteLinesAppended indices of the input x that were concatonated with a preceeding line because the two lines contained unmatched Quote characters, and concatonating them produced a line with all Quotes matched. ncharsAppended an integer vector of the same length as quoteLinesConcatonated giving the number of characters in the second line concatonated onto the previous line.

Author(s)

Spencer Graves

See Also

strsplit1 delimMatch

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
chvec <- c('abc', 'de"f', ' ', '",', 'g"h', 'matched"quotes"', '')
ch. <- matchQuote(chvec)

# check 
chv. <- c('abc', 'de"f ",', 'g"h', 'matched"quotes"', '')
attr(chv., 'unmatchedQuotes') <- c(2, 4, 5)
attr(chv., 'blankLinesDropped') <- 3
attr(chv., 'quoteLinesAppended') <- 4
attr(chv., 'ncharsAppended') <- 2 

all.equal(ch., chv.)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.