দুটি ফাইলের বিষয়বস্তু অদলবদল করুন


13

এটি একটি কোড-গল্ফ প্রশ্ন। আপনাকে দুটি পৃথক ফাইলের বিষয়বস্তু নিতে হবে (i.txt এবং o.txt) এবং সেগুলি অদলবদল করতে হবে। প্রক্রিয়াটি আপনাকে সহায়তা করতে আপনি একটি তৃতীয় ফাইল তৈরি করতে পারেন, তবে ফাইলের বিষয়বস্তুগুলি অদলবদল করার পরে আপনার প্রোগ্রামটি এটি মুছুন। ফাইলগুলির পুনরায় নামকরণের অনুমতি এখন আবার allowed

প্রোগ্রামগুলি অবশ্যই কোনও ফাইল সামগ্রীর জন্য কাজ করবে।

সংক্ষিপ্ততম কোড জয়, সমস্ত যোগ্য সাবমিশনগুলি আপ-ভোট দেওয়া হবে।


2
ফাইলগুলির নাম পরিবর্তন করুন। ফলাফল অর্জনের জন্য "সামগ্রীগুলি নিতে" এবং এগুলি অদলবদল করার দরকার নেই।
ড্যারেন স্টোন

@ ড্যারেন স্টোন আমার ধারণা এটি অবৈধ হওয়া উচিত। উত্তর জমা দেওয়ার আগে তা ধরার জন্য ধন্যবাদ

খারাপ সীমাবদ্ধতার মতো দেখে মনে হচ্ছে, নামকরণ এটি করার সর্বোত্তম উপায়
hdante

1
ঠিক আছে, আমি এই প্রতিবন্ধকতা সরাতে পারি।

6
@hdante কিন্তু 'ফাইলের নাম পরিবর্তন' তাদের বিষয়বস্তু আদান প্রদান করছে না । একটি সিস্টেম যে ব্যবহারসমূহ উপর inodeগুলি লক্ষ্য এখানে হবে i.txt's inodeথেকে তথ্য ধারণ করে o.txts' এর inodeযে, যদি hardlinks হয় যারা বিপরীতভাবে, এবং ভাইস, তাই inodeঅন্যত্র গুলি, তাদের বিষয়বস্তু পাশাপাশি আনা প্রদর্শিত হবে। পুনরায় নামকরণ এটি সম্পাদন করতে পারে না।
জে ম্যানসফিল্ড

উত্তর:


9

zsh, 20

<i*>t;<o*>i*;mv t o*

1
আমি একটি অস্থায়ী ফাইল ভাল ছাড়া এক মত, যদিও: i=`<i.txt`;<o*>i*;<<<$i>o*। এটা খুব খারাপ এটি ছোট হতে হবে।
Ry-

1
ফাইলগুলির নাম পরিবর্তন করার অনুমতি দেওয়ার জন্য নিয়মগুলি পরিবর্তন করা হয়েছে। আপনি চাইলে আপনার কোড আপডেট করতে পারেন।

আপনি প্রতিস্থাপন <t>o*;rm tকরে 3 টি অক্ষর বাঁচাতে পারেন mv t o*!
এফ। হাউরি

@ এফ.হৌরি: আহা, ধন্যবাদ! (এক পর্যায়ে নতুন নামকরণের বিধি ছিল।)
রাই-

এই কোডটি সঠিক নয়। এটি কেবলমাত্র বিশেষ ক্ষেত্রে কাজ করে যেখানে i * এবং o * যথাক্রমে কেবলমাত্র i.txt এবং o.txt এর সাথে মেলে, অর্থাত্ "i" বা "o" এর সাথে শুরু করে নামের সাথে অন্য কোনও ফাইল নেই।
এরওয়ান লেগ্র্যান্ড

3

পাইথন, 77

import os;t='.txt';r,i,o,x=[os.rename,'i'+t,'o'+t,'1'+t];r(i,x);r(o,i);r(x,o)

পাইথন, 65

import os;t='.txt'
for a,b in zip('iox','xio'):os.rename(a+t,b+t)

পাইথন, 63

import os;t='.txt'
for a,b in 'ix','oi','xo':os.rename(a+t,b+t)

পিএইচপি, 68

<?$r=rename;$t='.txt';$r("i$t","x");$r("o$t","i$t");$r("x","o$t");?>

উইন্ডোজ ব্যাচ ফাইল, 42

move i.txt x&move o.txt i.txt&move x o.txt

উইন্ডোজ ব্যাচ ফাইল (আরগস), 30

move %1 x&move %2 %1&move x %2

আমি জানতাম না যে আপনি $r=renameপিএইচপি-তে ফাংশনগুলির জন্য উপকরণ তৈরি করতে ব্যবহার করতে পারেন। ধন্যবাদ!
আওয়ামী লীগের

2

দুটি ভিত্তিক আনসারস; 52 এবং 62 অক্ষর cha

শেল: ডিফ + প্যাচ (+ টি + সেড ...) 52

সম্ভবত সংক্ষিপ্ত নয়, তবে আমি এই মজাটি খুঁজে পাই (এবং অস্থায়ী ফাইলটির কোনও ব্যবহার নেই ):

diff -u [io]*|tee >(patch -r -)|sed 1s/i/o/|patch -R

যেখানে সামগ্রীটি অদলবদল করা হয়েছে এবং ফাইলগুলি জায়গায় পরিবর্তিত হয়েছে :

নমুনা রান

swapContent() { diff -u $1 $2|tee >(patch -r -)|sed 1s/$1/$2/|patch -R ;}

while read page file ;do man -Pcol\ -b $page >$file.txt;done <<<$'man i\nbash o'
printf "%s %8d  %s\n" $(join -j 2 <(stat -c '%s %n' [io]*) <(md5sum [io]*))
swapContent [io]*
printf "%s %8d  %s\n" $(join -j 2 <(stat -c '%s %n' [io]*) <(md5sum [io]*))

যেমন কিছু উত্পাদন করতে পারে:

i.txt    46007  1da1f7533e0eab1e97cce97bb7ca1d3b
o.txt   321071  7dcd230890faf4ef848d4745eda14407
patching file o.txt
i.txt   321071  7dcd230890faf4ef848d4745eda14407
o.txt    46007  1da1f7533e0eab1e97cce97bb7ca1d3b

অনুরোধগুলি সহজ করার জন্য xargs ব্যবহারmv

মজার মতো নয়, তবে যাই হোক না কেন দুর্দান্ত।

set -- {i,o}.txt t&&eval 'xargs -n2 mv<<<"' \${1,3,2,1,3,2} \"

নোট: প্রথম প্যাচ আউটপুট পুনঃনির্দেশিত না হওয়ায় তারা দ্বিতীয় প্যাচ কমান্ডে আবর্জনা হয়ে যায়। শুধুমাত্র কারণ patching file o.txtপ্রদর্শিত কারণ এটি ।
এফ। হাউরি

2

পিএইচপি, 89

আমি ভেবেছিলাম আমি এটি একটি শট দিতে হবে।

<?php $f1='f1.txt';$f2='f2.txt';$ft='ft.txt';copy($f1,$ft);copy($f2,$f1);rename($ft,$f2);

অবরুদ্ধ সংস্করণ:

<?php
$f1 = 'f1.txt';
$f2 = 'f2.txt';
$ft = 'ft.txt';

copy($f1, $ft);
copy($f2, $f1);
rename($ft, $f2);

স্পষ্টতই আমি এখানে 2 টি উত্তর নিয়েছি এবং তাদের সংযুক্ত করেছি .. ওহ ভাল।


2

রুবি, 72 বাইট

কি দারুন! একটি রুবি কোড গল্ফ! আমি মনে করি না যে এর আগে কখনও চেষ্টা করা হয়েছিল!

যদিও সমস্ত বাস্তবতায়, এর জন্য কিছু সুন্দর রুবি শর্টকাট এবং একটি দম্পতি নিদর্শন পাওয়া গেছে যা আমি পেয়েছি। এটি আমার প্রথম গল্ফ ছিল এবং এটি করতে খুব মজা পেয়েছিল। আরও অ্যাডো ছাড়াই এখানে গল্ফ কোডটি রয়েছে:

3.times{|x|x*=2;t=".txt";a=([?i,?a,?o]*2);File.rename(a[x]+t,a[x+1]+t)}

এবং ungolfed সংস্করণ

3.times do |x|
    x = x * 2
    t=".txt"
    a=([?i,?a,?o]*2)
    File.rename(a[x]+t, a[x+1]+t)}
end

এর মূল কারণটি হ'ল প্যারামিটারগুলি হ'ল এটি হ'ল File.rename:

File.rename "i.txt", "a.txt"
File.rename "o.txt", "i.txt"
File.rename "a.txt", "o.txt"

আশা করি এটি (না) বোঝার মত!


2

পাওয়ারশেল, 44 49 বাইট

$t='.txt'
ren i$t a$t -fo
ren o$t i$t
ren a$t o$t

পুনরায় নামকরণ-আইটেমেরren জন্য উপনাম কোথায় । স্ক্রিপ্টটি তৃতীয় ফাইলটি ব্যবহার করে এবং মুছে দেয় ।a.txt


1
এটি নির্দিষ্ট এনকোডিং সহ ব্যর্থ হতে পারে। কারণ gcডিফল্টটি ইউটিএফ 8 নোবোম তবে scডিফল্ট হ'ল ASCII। কিছু ইউটিএফ -8 ফাইল বা বাইনারি ফাইল চেষ্টা করে দেখুন এটি কীভাবে ব্যর্থ হতে পারে তা আপনি দেখতে পারেন।
অ্যাডমবর্কবার্ক

প্রকৃতপক্ষে. ধন্যবাদ। -e by -nফাইলগুলি অপরিবর্তিত রয়েছে তা নিশ্চিত করার জন্য এটিগুলির পরামিতিগুলির প্রয়োজন । -readCount 0পারফরম্যান্সে একটি প্যারামিটার যুক্ত করা ভাল হবে । সহ স্ক্রিপ্টটি renameসংক্ষিপ্ত :) স্থির।
mazzy

1

চুনি

i1="i.txt"
i2="o.txt"
c1=IO.readlines(i2)
c2=IO.readlines(i1)
File.open(i1){|x|x.puts(c1)}
File.open(i2){|x|x.puts(c2)}

সংক্ষিপ্ত সংস্করণ:

a=["i.txt","o.txt"]
(0..1).each{|x|b[x]=IO.readlines(a[x])*"\n"}
a.reverse!
(0..1).each{|x|IO.write(a[x],b[x])}

সবচেয়ে সংক্ষিপ্ত নয়, তবে খুব সহজ এবং পড়তে সহজ। এছাড়াও, কোনও মধ্যবর্তী ফাইল নেই, কেবল র‌্যাম।


1
এটি একটি কোড-গল্ফ দেওয়া , আপনি কমপক্ষে স্থানগুলি সরিয়ে নিতে এবং সংক্ষিপ্ততার জন্য কিছুটা চেষ্টা করতে পারেন।
Ry-

পুরোপুরি বুঝতে পারিনি এটি কোড-গল্ফ, দুঃখিত

1

পিএইচপি

$f1 = 'file1.txt';
$f2 = 'file2.txt';

$f1contents = file_get_contents ($f1);
$f2contents = file_get_contents ($f2);

file_put_contents($f1, $f2contents);
file_put_contents($f2, $f1contents);

10
সত্যিই গোলমাল নয় যেগুলি :(
জ্যাকব

1

শেল লিপি, 24

বাশ এবং সম্ভবত বেশিরভাগ শাঁসে কাজ করে। প্যারামিটার হিসাবে আপনার দুটি ফাইলের নাম দিয়ে পাস করুন।

mv $1 ੴ;mv $2 $1;mv ੴ $2

আপনি যদি স্থির ফাইলের নাম চান তবে এটি 12 টি জরিমানার জন্য এটি করবে:

mv i.txt ੴ;mv o.txt i.txt;mv ੴ o.txt

@ মিনিটেক, হ্যাঁ তা করে। '।' 'O.txt' হয়ে যায়। এগুলি mvঅপারেশন, না cp
ড্যারেন স্টোন

এখন পর্যন্ত দ্বিতীয় সেরা উত্তর! এটি দুটি অক্ষর দ্বারা হ্রাস করুন এবং আপনি জয়! আমি স্থির ফাইল নামগুলির বিষয়ে চিন্তা করি না।

1

পাইথন:

import os
l,e='i_o'*2,'.txt'
for x,y in zip(l,l[1:])[::2]:
 os.rename(x+e,y+e)

1

উইন্ডোজ ব্যাচ ফাইল (48)

type i.txt>a&type o.txt>i.txt&type a>o.txt&del a

আমি মুভি কমান্ডটি ভুলে গিয়েছিলাম যখন আমি এটি লিখেছিলাম ...


আপনি শুধু আমার aফাইলটি ওভাররোট করুন!
ড্যানি

@ ড্যানি প্রশ্নটিতে বলা হয়েছে যে আপনি অন্য একটি ফাইল তৈরি করতে পারেন, তবে এটি অবশ্যই মুছে ফেলা উচিত।
kitcar2000

1

সি 162

গল্ফড: টিএমপিটি টিএমপি ফাইল হিসাবে ব্যবহার করে এবং নাম বদল করে তারপরে t.txt মুছে দেয়।

#include <stdio.h>
#define R(x,y) rename(x,y)
#define X(x) remove(x)
int main(){char *i="i.txt",*o="o.txt",*t="t.txt";R(i,t);X(i);R(o,i);R(t,o);X(t);return 0;}

সম্পাদনা করুন: 2 টি স্পেস সরানো হয়েছে


1

পিএইচপি - 172

@ আইসাএডিলের উত্তরের গল্ফ সংস্করণ

$f1='file1.txt';$f2='file2.txt';$f1contents=file_get_contents($f1);$f2contents=file_get_contents($f2);file_put_contents($f1,$f2contents);file_put_contents($f2,$f1contents);

1

রিবোল - 46 (ফাইলের নাম পরিবর্তন করুন) বা 55 (আর / ডাব্লু সামগ্রী)

ফাইলটির নাম পরিবর্তন করুন ( tঅস্থায়ী ফাইল হিসাবে ব্যবহার করে ):

r: :rename 
r i: %i.txt %t
r o: %o.txt i
r %t o

পড়ুন তারপর ফাইল সামগ্রী লিখুন:

a: read i: %i.txt
b: read o: %o.txt
write o a 
write i b

1

পিএইচপি, 45

<?php
copy('i','t');copy('o','i');rename('t','o');

খুব গোলাপী নয় তবে এখন পর্যন্ত সংক্ষিপ্ত পিএইচপি।


ফাইল এক্সটেনশানগুলি অনুপস্থিত।
টাইটাস

1

গ্রোভি - 99 টি চর

গ্রোভির ২.২.২ এর সাথে এটি আমার চেষ্টা। নাম পরিবর্তন না করে আমি এটি করার চেষ্টা করেছি:

f={new File(it+".txt")}
w={x,y->x.withWriter{it.write y}}
i=f "i"
o=f "o"
t=i.text
w i,o.text
w o,t

Ungolfed:

file = { new File(it+".txt") }
writeTextToFile = { x,y -> x.withWriter{it.write y} }

iFile = file("i")
oFile = file("o")

iText = iFile.text
writeTextToFile (iFile,oFile.text)
writeTextToFile (oFile,iText)

1

ভিবিএ (148 ... 132) এবং (126 ... 110)

গ: \ ড্রাইভে একটি অস্থায়ী ফাইল টি দিয়ে পুনরায় নামকরণ। গল্ফ এ প্রথম প্রচেষ্টা: এস

Sub s():Set f=CreateObject("Scripting.FileSystemObject"):i="c:\i.txt":t="c:\t":f.MoveFile i,t:f.MoveFile "c:\o.txt",i:Kill t:End Sub

যদি scrrun.dll ইতিমধ্যে রেফারেন্স করা হয় তবে এটি কিছুটা কেটে 126 ... 110 এ নামিয়ে দিতে পারে।

Sub s():Set f=new FileSystemObject:i="c:\i.txt":t="c:\t":f.MoveFile i,t:f.MoveFile "c:\o.txt",i:Kill t:End Sub

দেখে মনে হচ্ছে আপনার কোডটিতে অনেক সাদা জায়গা রয়েছে। আপনি কি নিশ্চিত যে এগুলি প্রয়োজন? এগুলি সরিয়ে ফেললে আপনার আরও অনেক ভাল স্কোর থাকতে পারে।
ব্যবহারকারী 12205

আমার মনে হয় না
এডিটরটিকে

1

সি: 65 টি অক্ষর

#define r(a,b)rename(#a".txt",#b".txt");
main(){r(i,)r(o,i)r(,o)}

সি একটি বেশ সহজ সমাধান যা কাজ করে। এটি .txtযথাযথ নতুন নাম দেওয়ার আগে ফাইলগুলির মধ্যে একটির জন্য একটি অস্থায়ী নাম ( ) ব্যবহার করে।

অবহেলিত (নোটটিতে সংশ্লেষের হাইলাইট কীভাবে ব্যর্থ হয়েছে তা নোট করুন, একটি বাগ উন্মুক্ত করা হয়েছে!):

#include <stdio.h>

#define r(a, b) rename(#a ".txt", #b ".txt");

int main()
{
    r(i,  ) // rename("i.txt",  ".txt");
    r(o, i) // rename("o.txt", "i.txt");
    r( , o) // rename( ".txt", "o.txt");

    return 0;
}

1

পার্ল, ১২০ বাইট (বিষয়বস্তু ফাইলের নাম বাদ দিয়ে অদলবদল করা)

use open IO,':bytes';undef$/;open I,"<i.txt";$I=<I>;open I,"<o.txt";open O,">i.txt";print O<I>;open O,">o.txt";print O$I

ফাইলের বিষয়বস্তুগুলি মেমরিতে রাখা হয় এবং অন্য ফাইলে আবার লেখা হয়। সুতরাং i.txtএবং o.txtস্মৃতিতে মাপসই করা আবশ্যক।

যেহেতু ফাইলের বিষয়বস্তুগুলি আসলে বিনিময় করা হয়, তাই হার্ড লিঙ্কগুলি স্বয়ংক্রিয়ভাবে আপডেট হয়, এজেম্যানফিল্ডের মন্তব্য দেখুন

Ungolfed:

use open IO => ':bytes'; # binmode, not needed for Unix, but needed for Windows
undef $/;                # read whole file instead of lines
open I, "<i.txt";        # open i.txt for reading
$I = <I>;                # read i.txt
open I, "<o.txt";        # open o.txt for reading
open O, ">i.txt";        # open i.txt for writing
print O <I>;             # read o.txt and put the contents in i.txt
open O, ">o.txt";        # open o.txt for writing
print O $I;              # write o.txt with contents of old i.txt


1

লুয়া ,71 70 বাইট

_ENV=os t='.txt'i,o,r='i'..t,'o'..t,rename r(i,t)r(o,i)r(t,o)remove(t)

এটি অনলাইন চেষ্টা করুন!

নির্ধারণ করুন os, অপারেটিং সিস্টেম গ্রন্থাগার, গ্লোবাল টেবিল হিসাবে তাই আমরা লিখতে পারি renameএবং removeপরিবর্তে os.renameএবং os.remove। (ঘটনাক্রমে এর অর্থ এটিও হ'ল এক-বর্ণের ভেরিয়েবলগুলি আসলে osটেবিলের ক্ষেত্র os.renamesave '.txt'অস্থায়ী ফাইল হিসাবে ব্যবহার করে ফাইলের নাম ভেরিয়েবল সেট আপ করুন। নাম পরিবর্তন এবং মুছে ফেলার কাজ করুন Do



1

টিসিএল , 122 বাইট

set A [read [open i.txt]]
puts [set i [open i.txt w]] [read [open o.txt]]
puts [set o [open o.txt w]] $A
close $i
close $o

এটি অনলাইন চেষ্টা করুন!


টিসিএল , 169 বাইট

set A [read [set i [open i.txt r]]]
set B [read [set o [open o.txt r]]]
close $i
close $o
puts [set i [open i.txt w]] $B
puts [set o [open o.txt w]] $A
close $i
close $o

এটি অনলাইন চেষ্টা করুন!


0

স্মাইলব্যাসিক, 36 35 বাইট

@L
RENAME@OI[2-I],@IO[I]I=I+1GOTO@L
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.