2017-05-15 1 views
-2

innerhalb eines Ordners, ich habe die folgenden zwei Textdateien:Rubin 00.59 und eins zu mehreren Mapping

sample_1.txt

# Planned on June 21st 2016 
# Proposed by John Take (jfc43t) 

auth = crt\jfc43t, crt\cz8jio, crt\czr5o2 
perm = jio\uy6y0n, crt\lp8n77, crt\cz8jio 
taped = jio\uy6y0n 

sample_2.txt

# Planned on June 22nd 2016 
# Proposed by rae ball(po09iv) 

div = crt\mzrt7r, crt\mzi01r, jio\buy7xd 
perm = crt\r9myl7, jio\buy7xd, crt\soi8wh 
read = crt\mzrt7r 

Ich möchte um diese Dateien zu lesen und in einer Protokolldatei auf folgende Weise zu drucken:

out.log

Name crt\cz8jio 
Deleted from row id : auth, perm 

Name crt\lp8n77 
Deleted from row id : perm 

Name crt\mzrt7r 
Deleted from row id : div, read 

Ich benutzte Arrays und Karte nicht ordnungsgemäß. Ich habe auch Hashes versucht, aber ich bin mir nicht sicher, wie ich sie in meinem Code verwenden soll.

Das ist mein unvollständig Code, das Beste, was ich versucht habe:

........ 
........... 
    id_files.each do |file_name| 
     text = File.read(file_name) 
     replace = text.gsub(/#{Regexp.escape(line)}/, '')#this is for top loop 
     unless text == replace 
     text.each_line do |li| 
      if li.match(/#{Regexp.escape(line)}/) then #line is a variable substitution from top loop 
      pool << li.split(" ")[0]   
      end 

     end 
     File.open('E\users.txt', 'a') { |rem| 
     rem.puts "Removed from: #{file_name}" 
     rem.puts "Removed user : #{line}" 
     rem.puts "Removed from row :#{pool.join(' and ')}" 
     } 
     ..... 
     ...... 
+1

Es würde helfen, wenn Sie einen Code hinzugefügt, die zumindest diese Zeilen analysiert, oder gaben eine Code-Form Skizze von dem, was du versuchst es zu tun. – tadman

+0

@tadman: Mein schlechtes, vergaß es hinzuzufügen. Ich habe das Code-Snippet hinzugefügt. Pls. Entschuldigung wenn es sehr nooby ist. – voltas

+0

Es ist immer gut zu sehen, wie Sie Dinge eingerichtet haben, damit andere darauf aufbauen und weitermachen können. – tadman

Antwort

2

Dies funktioniert gut für eine hart codierte Datei, um sie einfach neu schreiben Ihren Bedürfnissen entsprechend.

text = File.read('in.log') 
result = {} 
text.each_line do |line| 
    if /\A(?<id>[^=]+) = (?<names>.*)$/ =~ line 
    names.split(', ').each do |name| 
     result[name] ||= [] 
     result[name] << id 
    end 
    end 
end 

File.open('out.log', 'a') do |f| 
    result.each do |key, value| 
    f.puts "Name #{key}" 
    f.puts "Deleted from row id : #{value.join(', ')}" 
    f.puts "\n" 
    end 
end 

Eingang:

# Planned on June 21st 2016 
# Proposed by John Take (jfc43t) 

auth = crt\jfc43t, crt\cz8jio, crt\czr5o2 
perm = jio\uy6y0n, crt\lp8n77, crt\cz8jio 
taped = jio\uy6y0n 

Ausgang:

Name crt\jfc43t 
Deleted from row id : auth 

Name crt\cz8jio 
Deleted from row id : auth, perm 

Name crt\czr5o2 
Deleted from row id : auth 

Name jio\uy6y0n 
Deleted from row id : perm, taped 

Name crt\lp8n77 
Deleted from row id : perm 
+0

Danke für die Idee, die ich nach meinen Anforderungen modifiziert habe. – voltas

+0

@voltas Kein Problem, froh, Ihnen zu helfen. – DjezzzL

Verwandte Themen