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."