R 将带有多字符分隔符的文本文件读取到多字符分隔符中的列表

R 将带有多字符分隔符的文本文件读取到多字符分隔符中的列表,r,io,R,Io,我有一个包含文本数据的文本文件(我的意思是,不是表格或数字,而是实际的英语句子)。每两个句子都有一个三重星号(***),用于区分上一个句子和下一个句子。我需要将每个组作为列表的一个元素。我试过readLines、readchar和strsplit,但都没能成功。 下面是一个例子: Hello Everyone. My name is James. *** Hello James! My name is Amy. Nice to meet you. *** Hi Amy! My name

我有一个包含文本数据的文本文件(我的意思是,不是表格或数字,而是实际的英语句子)。每两个句子都有一个三重星号(***),用于区分上一个句子和下一个句子。我需要将每个组作为列表的一个元素。我试过
readLines
readchar
strsplit
,但都没能成功。 下面是一个例子:

Hello Everyone.
My name is James.

***

Hello James!
My name is Amy.
Nice to meet you.

***

Hi Amy!
My name is Sue.

所以我需要一个包含三个元素的列表,每个元素都是一个包含组的向量。请注意,在一组句子中有换行符。

试试这个。如果文本在文件中,则将
文本连接(行)
替换为类似
的“myfile.txt”

如果您需要单个行的字符向量列表,而不是字符向量,请再次应用
strsplit

strsplit(v, "\n")
或者,如果您只是想强制
v
进入一个列表:

as.list(v)

试试这个。如果文本在文件中,则将
文本连接(行)
替换为类似
的“myfile.txt”

如果您需要单个行的字符向量列表,而不是字符向量,请再次应用
strsplit

strsplit(v, "\n")
或者,如果您只是想强制
v
进入一个列表:

as.list(v)

假设
data.txt
保存您的文本条目。这是你想要的吗(以R为基数):


data假设
data.txt
保存您的文本条目。这是你想要的吗(以R为基数):


数据您是否始终具有格式
第1行、第2行、空行、三重星号行
?或者文本行数是可变的?@mauritservers它是可变的。可能有也可能没有空行。可能有两个。这里重要的是在三个星号上划界文本。您是否总是使用格式
第1行、第2行、空行、三个星号行
?或者文本行数是可变的?@mauritservers它是可变的。可能有也可能没有空行。可能有两个。这里重要的是在三个星号上划出文本的界限。太好了!唯一的问题是,我需要每个组作为列表的一个元素。在上面的例子中,我需要一个长度为3的列表,而不是一个向量。然后每个元素将包含一组句子。顺便问一下,如果我打印出来,R是否会自然中断?我们添加了一个额外的strsplit来将其拆分为行。我不清楚最后一条评论中的问题是什么意思。它必须是星号之间的每一段的列表,而不是每一行。也就是说,就像上面打印的v一样,只是一个列表。列表中的每个元素都是整个组(可能是多行),而不是单独的行。请参阅答案末尾的附加信息。太好了!唯一的问题是,我需要每个组作为列表的一个元素。在上面的例子中,我需要一个长度为3的列表,而不是一个向量。然后每个元素将包含一组句子。顺便问一下,如果我打印出来,R是否会自然中断?我们添加了一个额外的strsplit来将其拆分为行。我不清楚最后一条评论中的问题是什么意思。它必须是星号之间的每一段的列表,而不是每一行。也就是说,就像上面打印的v一样,只是一个列表。列表中的每个元素都是整个组(可能是多行),而不是单独的行。请参阅答案末尾的附加信息。
data <- readLines("data.txt");

#Optionally remove empty lines
data <- data[data != ""];

# Split based on triple asterisk entries
lst <- split(data, cumsum(data == "***"));

# Remove triple asterisk entries
lst <- lapply(lst, function(x) x[x != "***"])
print(lst);

$`0`
[1] "Hello Everyone."   "My name is James."

$`1`
[1] "Hello James!"    "My name is Amy."

$`2`
[1] "Hi Amy!"         "My name is Sue."