<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>по стопам webkill&#039;а &#187; вычитание файла из файла</title>
	<atom:link href="http://blog.lukmus.ru/tag/vyichitanie-fayla-iz-fayla/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>&#8216;вычитание&#8217; из одного файла другого</title>
		<link>http://blog.lukmus.ru/2010/06/17/vyichitanie-iz-odnogo-fayla-drugogo/</link>
		<comments>http://blog.lukmus.ru/2010/06/17/vyichitanie-iz-odnogo-fayla-drugogo/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 01:20:35 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[вычитание файла из файла]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=45</guid>
		<description><![CDATA[Поздним зимним вечером передо мной снова встала проблема с файликами типа login:pass, на этот раз нужно было вычесть из одного второй, иначе говоря получить такой файл, где содержались бы только те записи первого файле, которых нет во втором. Небоюсь злобы гуру различных оффисов, но такой функции явно нет ни в одном из приложений набора office. [...]]]></description>
			<content:encoded><![CDATA[<p>Поздним зимним вечером передо мной снова встала проблема с файликами типа login:pass, на этот раз нужно было вычесть из одного второй, иначе говоря получить такой файл, где содержались бы только те записи первого файле, которых нет во втором. Небоюсь злобы гуру различных оффисов, но такой функции явно нет ни в одном из приложений набора office. И я опять написал скриптик, и опять на Ruby.<span id="more-45"></span></p>
<p>А вот он:</p>
<blockquote><p>#!/usr/bin/ruby<br />
require &#8216;base64&#8242;</p>
<p>n=ARGV.size<br />
if n&lt;=3 or n&gt;5<br />
puts &#8220;Not enought arguments\n &lt;firstfile&gt; &lt;secondfile&gt; &lt;+|-&gt; [outputfile] [-su&lt;d|U&gt;]&#8221;<br />
exit<br />
end<br />
$fi_file=ARGV[0]<br />
$se_file=ARGV[1]<br />
$sign=ARGV[2]<br />
if $sign!=&#8217;+&#8217; and $sign!=&#8217;-&#8217;<br />
puts &#8220;Unknow argument #{$sign}&#8221;<br />
exit<br />
end</p>
<p>def make (str)<br />
sort=false<br />
udcase=0<br />
uniq=false<br />
if str.include? &#8216;s&#8217; then sort=true end<br />
if str.include? &#8216;d&#8217; then udcase=1 else<br />
if str.include? &#8216;U&#8217; then udcase=2 else udcase=0 end<br />
end<br />
if str.include? &#8216;u&#8217; then uniq=true end<br />
return sort,udcase,uniq<br />
end</p>
<p>if n&gt;3<br />
if !(ARGV[3].include?(&#8216;-s&#8217;) or ARGV[3].include?(&#8216;-d&#8217;) or ARGV[3].include?(&#8216;-U&#8217;) or ARGV[3].include?(&#8216;-u&#8217;))<br />
$outfile=ARGV[3]<br />
else<br />
$outfile=$fi_file+$se_file+&#8217;_out&#8217;<br />
$sort,$udcase,$uniq=make ARGV[3]<br />
end</p>
<p>if n==5 then  $sort,$udcase,$uniq=make ARGV[4] end</p>
<p>end</p>
<p>begin<br />
f_arr=IO.readlines($fi_file)<br />
rescue =&gt; e<br />
puts &#8220;Can&#8217;t read file #{$fi_file}:#{e}&#8221;<br />
end</p>
<p>begin<br />
s_arr=IO.readlines($se_file)<br />
rescue =&gt; e<br />
puts &#8220;Can&#8217;t read file #{$se_file}:#{e}&#8221;<br />
end</p>
<p>f_arr.each {|x| x.chop!}<br />
s_arr.each {|x| x.chop!}</p>
<p>case $sign<br />
when &#8216;-&#8217;<br />
r_arr=f_arr-s_arr<br />
when &#8216;+&#8217;<br />
r_arr=f_arr+s_arr<br />
end</p>
<p>if $udcase==1<br />
puts &#8220;Downcase&#8230;&#8221;<br />
r_arr.each {|x| x.downcase!}<br />
end<br />
if $udcase==2<br />
puts &#8220;Upcase&#8230;&#8221;<br />
r_arr.each {|x| x.upcase!}<br />
end<br />
if $uniq<br />
puts &#8220;Delete repetitions&#8230;&#8221;<br />
r_arr.uniq!<br />
end<br />
if $sort<br />
puts &#8220;Sort&#8230;&#8221;<br />
r_arr.sort!<br />
end</p>
<p>begin<br />
puts &#8220;Create output file #{$outfile}&#8221;<br />
File.open($outfile,&#8221;w&#8221;) {|file| r_arr.each {|x| file.puts x }}<br />
rescue =&gt; e<br />
puts &#8220;Can&#8217;t create file #{$outfile}:#{e}&#8221;<br />
end</p></blockquote>
<p>На входе:</p>
<ul>
<li>firstfile &#8211; первый файл</li>
<li>secondfile &#8211; второй файл</li>
<li>+/- &#8211; соответсвенно либо прибавляем к первому второй, либо вычитаем из первого второй</li>
<li>outputfile &#8211; выходной файл</li>
<li>ключ -s &#8211; сортировка</li>
<li>ключ -u &#8211; убрать повторы</li>
<li>ключ -d &#8211; нижний регистр</li>
<li>ключ -U &#8211; верхний регистр</li>
</ul>
<p>Наслаждйтесь.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/06/17/vyichitanie-iz-odnogo-fayla-drugogo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
