একক অক্ষরের স্ট্রিং হিসাবে পাঠ্য ফাইলটি আমদানি করুন


204

আপনি কীভাবে একটি সরল পাঠ্য ফাইলটি আর-তে একক অক্ষরের স্ট্রিং হিসাবে আমদানি করবেন? আমি মনে করি এটির একটি খুব সহজ উত্তর থাকতে পারে তবে আজ আমি যখন এটি চেষ্টা করেছি তখন আমি দেখতে পেলাম যে এটি করার জন্য আমি কোনও ফাংশন পাইনি।

উদাহরণস্বরূপ, ধরুন আমার foo.txtকাছে টেক্সটমাইন করতে চাইলে এমন একটি ফাইল আছে ।

আমি এটি দিয়ে চেষ্টা করেছি:

scan("foo.txt", what="character", sep=NULL)

তবে এটি এখনও ভেক্টরকে ফিরিয়ে দিয়েছে। আমি এটি দিয়ে কিছুটা কাজ করেছিলাম:

paste(scan("foo.txt", what="character", sep=" "),collapse=" ")

তবে এটি বেশ কুৎসিত সমাধান যা সম্ভবত খুব অস্থিরও।


20
readr::read_fileএই সমস্যাটি এখন খুব সুন্দরভাবে সমাধান করে।
জাচ

উত্তর:


213

এখানে @ জোশুয়াউলিরিচের সমাধানের একটি বৈকল্পিক যা একটি হার্ড-কোডেড আকারের পরিবর্তে সঠিক আকার ব্যবহার করে:

fileName <- 'foo.txt'
readChar(fileName, file.info(fileName)$size)

নোট করুন যে রিডচার আপনার নির্দিষ্ট করা বাইটের জন্য স্থান বরাদ্দ readChar(fileName, .Machine$integer.max)করে , তাই ভাল কাজ করে না ...


18
এটি উল্লেখ করার মতো যে এই কোডটি সংকোচিত ফাইলগুলির জন্য কাজ করবে না। সেক্ষেত্রে ফাইল.info (ফাইলের নাম) দ্বারা আকারে ফিরে আসা বাইটের সংখ্যা আকার মেমরির মধ্যে পড়বে এমন প্রকৃত সামগ্রীর সাথে মেলে না, যা আমরা বড় হওয়ার প্রত্যাশা করি।
asieira

146

যদি কেউ 3 বছর পরে এখনও এই প্রশ্নটি দেখছে তবে হ্যাডলি উইকহামের পাঠক প্যাকেজের একটি read_file()কার্যকর ফাংশন রয়েছে যা এটি আপনার জন্য করবে।

install.packages("readr") # you only need to do this one time on your system
library(readr)
mystring <- read_file("path/to/myfile.txt")

2
হায়রে "read_file" এখন স্ট্রিংরে উপস্থিত হয় না। :( cran.r-project.org/web/packages/stringr/stringr.pdf
মাইকেল লয়েড লি এমএলকে

7
@ এম কে কে এতে স্থানান্তরিত করা হয়েছে readr। আমি সেই অনুযায়ী উত্তর আপডেট করেছি - আমি আশা করি শেরোন কিছু মনে করবেন না।
নিক কেনেডি

1
সুন্দর! ফ্লাইতে .gz ফাইলগুলিও
সংক্রামিত করে

আমি could not find function "pase"এই কোডটি পেয়েছি
সাশকো লাইখেনকো

47

আমি নিম্নলিখিত ব্যবহার করতে হবে। এটি ঠিক কাজ করা উচিত, এবং কমদামে আমার কাছে খারাপ লাগে না:

singleString <- paste(readLines("foo.txt"), collapse=" ")

15
আমি collapse="\n"আসল ফাইলে এগুলি পৃথক লাইন হ'ল সত্যটি প্রতিলিপি করে প্রত্যাশা করব । এই পরিবর্তনের সাথে, এই সমাধানটি সংকুচিত এবং সঙ্কুচিত ফাইলগুলির জন্য সমানভাবে ভাল কাজ করবে
asieira

এটি কাজ করে না বলে মনে হচ্ছে। আমি writeLines (singleString) যদি, আমি একটি দূষিত ফাইল পেতে ...
ভাঁড়

শেষ লাইনে লাইন চরিত্রের শেষ অন্তর্ভুক্ত না করা হলে এটি কাজ করে না। সেক্ষেত্রে শেষ লাইনটি স্ট্রিংয়ের অন্তর্ভুক্ত নয় (বিকল্প হিসাবে, ফাইলটি শেষ লাইনের বিরতিতে কাটা হয়)।
gvrocha 6'18

এটি ওপি'র কোয়েস্টনের মতো পাঠ্য ফাইলগুলি পড়ার জন্য দুর্দান্ত কাজ করবে: পাঠ্য ফাইল সংযোগগুলি blocking=TRUEডিফল্টরূপে হয় তাই readLines()কেবল অনুপস্থিত ইওএল চরিত্র সম্পর্কে একটি সতর্কতা সহ পুরো ফাইলটি ফিরিয়ে দেবে। তবে @ gvrocha এর মন্তব্যটি মূল্যবান: আপনার সংযোগের ধরণটি বুঝুন! ? পড়ুনলাইনস সাহায্য বলেছেIf the final line is incomplete (no final EOL marker) the behaviour depends on whether the connection is blocking or not. For a non-blocking text-mode connection the incomplete line is pushed back, silently. **For all other connections the line will be accepted, with a warning.**
ক্র্যাড করে


8

পাঠক প্যাকেজটি আপনার জন্য সমস্ত কিছু করার জন্য একটি ফাংশন রয়েছে।

install.packages("readr") # you only need to do this one time on your system
library(readr)
mystring <- read_file("path/to/myfile.txt")

এটি প্যাকেজ স্ট্রিংয়ের সংস্করণটি প্রতিস্থাপন করে।


5

খুব খারাপ যে শ্যারনের সমাধানটি আর ব্যবহার করা যাবে না। আমি জোশ ওব্রায়নের সমাধানকে আমার .R প্রোফাইলে ফাইলটিতে এশিয়ার পরিবর্তনের সাথে যুক্ত করেছি:

read.text = function(pathname)
{
    return (paste(readLines(pathname), collapse="\n"))
}

এবং এটা ভালো ব্যবহার করুন: txt = read.text('path/to/my/file.txt')। আমি গুড়ের (28 অক্টোবর। 14) সন্ধানের অনুলিপি করতে পারি না এবং writeLines(txt)এর সামগ্রীগুলি দেখিয়েছি file.txt। এছাড়াও, write(txt, '/tmp/out')কমান্ড diff /tmp/out path/to/my/file.txtকোনও পার্থক্য জানার পরে ।


2

রিডচরের তেমন নমনীয়তা নেই তাই আমি আপনার সমাধানগুলি (রিডলাইনস এবং পেস্ট) একত্রিত করেছি।

আমি প্রতিটি লাইনের মধ্যে একটি স্থানও যুক্ত করেছি:

con <- file("/Users/YourtextFile.txt", "r", blocking = FALSE)
singleString <- readLines(con) # empty
singleString <- paste(singleString, sep = " ", collapse = " ")
close(con)

1

দেখে মনে হচ্ছে আপনার সমাধানটি খুব কুৎসিত নয়। আপনি এই পদ্ধতিগুলির মতো ফাংশন ব্যবহার করতে এবং এটিকে পেশাদার হিসাবে তৈরি করতে পারেন

  • প্রথম উপায়
new.function <- function(filename){
  readChar(filename, file.info(filename)$size)
}

new.function('foo.txt')
  • দ্বিতীয় উপায়
new.function <- function(){
  filename <- 'foo.txt'
  return (readChar(filename, file.info(filename)$size))
}

new.function()

1
এটি @ টমির দেওয়া উত্তরের সাথে কিছু যোগ করে না । একটি ফাংশন পরিবেশের মধ্যে পথ সরবরাহ করা বিশেষত দুর্বল সমাধান।
কনরাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.