2016-10-23 15 views
0

テキストファイル(テーブルや数字ではなく、実際の英語の文章)を含むテキストファイルがあります。文の2〜3桁には、前の文と次の文を区切るための3つのアスタリスク(***)があります。リストの要素として各グループが必要です。私はreadLinesreadcharおよびstrsplitを試しましたが、動作させることはできません。 はここに例を示します複数の文字区切り文字を含むテキストファイルをRのリストに読み込む

Hello Everyone. 
My name is James. 

*** 

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

*** 

Hi Amy! 
My name is Sue. 

だから私はグループを含むベクトルであるそれぞれの3つの要素のリストを必要としています。グループの文章内に改行文字があることに注意してください。

+0

あなたは常に 'line1、line2、empty_line、triple_asterisk_line'の形式ですか?または、テキスト行の数は可変ですか? –

+0

@MauritsEversそれは変数です。空の行がある場合とない場合があります。 2つあります。ここで重要なのは、3つのアスタリスクのテキストを区切ることです。 –

答えて

2

data.txtがあなたのテキストエントリを保持していると仮定します。これはあなたが望むものですか(ベースR):

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

これを試してください。テキストがファイル内にある場合は、textConnection(Lines)"myfile.txt"のように置き換えてください。長さ3の次の文字ベクトル与え

Lines <- "Hello Everyone. 
My name is James. 

*** 

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

*** 

Hi Amy! 
My name is Sue." 

# L <- paste(readLines("myfile.txt"), collapse = "\n") 
L <- paste(readLines(textConnection(Lines)), collapse = "\n") 
v <- strsplit(L, "\n\n***\n\n", fixed = TRUE)[[1]] 

:代わりに文字ベクトルの個々の行の文字ベクトルのリストが必要な場合

> v 
[1] "Hello Everyone.\nMy name is James."    
[2] "Hello James!\nMy name is Amy.\nNice to meet you." 
[3] "Hi Amy!\nMy name is Sue." 

を再度strsplitを適用します。

strsplit(v, "\n") 

またはvをリストに強制したい場合:

as.list(v) 
+0

素晴らしい!唯一のことは、各グループがリストの要素として必要なことです。上の例では、ベクトルではなく長さ3のリストが必要です。各要素には、単一の文のグループが含まれます。 –

+0

ところで、これを印刷すればRが壊れるのは自然なのでしょうか? –

+0

追加のstrsplitを追加して行に分割しました。私は最後のコメントが意味することが何であるか明確ではない。 –

関連する問題