Fixed length records: Difference between revisions

m
syntax highlighting fixup automation
m (→‎{{header|Phix}}: added syntax colouring, marked p2js incompatible)
m (syntax highlighting fixup automation)
Line 50:
=={{header|Ada}}==
Ada string type is a fixed-length string.
<syntaxhighlight lang="ada">
<lang Ada>
with Ada.Text_IO; use Ada.Text_IO;
 
Line 92:
end loop;
end Main;
</syntaxhighlight>
</lang>
{{Output}}
<pre>
Line 121:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f FIXED_LENGTH_RECORDS.AWK
BEGIN {
Line 147:
return( substr(str,start,1) revstr(str,start-1) )
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 173:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <algorithm>
#include <cstdlib>
#include <fstream>
Line 208:
}
return EXIT_SUCCESS;
}</langsyntaxhighlight>
 
{{out}}
Line 226:
=={{header|COBOL}}==
 
<langsyntaxhighlight lang="cobol"> *> Rosetta Code, fixed length records
*> Tectonics:
*> cobc -xj lrecl80.cob
Line 314:
 
goback.
end program lrecl80.</langsyntaxhighlight>
 
Given a starting file sample.txt of
Line 351:
Demonstrate text to Forth source block form.
 
<langsyntaxhighlight lang="cobol"> *> Rosetta Code fixed length records, text to Forth block
identification division.
program-id. blocking.
Line 440:
 
goback.
end program blocking.</langsyntaxhighlight>
 
Demonstrate Forth source block to text form.
 
<langsyntaxhighlight lang="cobol"> *> Rosetta Code fixed length records, Forth blocks to text.
identification division.
program-id. unblocking.
Line 515:
 
goback.
end program unblocking.</langsyntaxhighlight>
 
=={{header|Delphi}}==
Line 525:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">
Const As Byte longRegistro = 80
Const archivoEntrada As String = "infile.dat"
Line 561:
Close
Sleep
</syntaxhighlight>
</lang>
 
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 618:
check(err)
fmt.Println(string(bytes))
}</langsyntaxhighlight>
 
{{out}}
Line 635:
'''Bonus round'''
 
<langsyntaxhighlight lang="go">package main
 
import (
Line 709:
block2text("block.dat", "block.txt")
text2block("block.txt", "block2.dat")
}</langsyntaxhighlight>
 
=={{header|J}}==
Line 715:
 
Using the 720 byte input file linked to in the Raku entry.
<langsyntaxhighlight lang="j"> _80 ]\ fread 'flr-infile.dat' NB. reads the file into a n by 80 array
_80 |.\ fread 'flr-infile.dat' NB. as above but reverses each 80 byte chunk
'flr-outfile.dat' fwrite~ , _80 |.\ fread 'flr-infile.dat' NB. as above but writes result to file (720 bytes)
processFixLenFile=: fwrite~ [: , _80 |.\ fread NB. represent operation as a verb/function</langsyntaxhighlight>
 
'''Example Usage:'''
 
<langsyntaxhighlight lang="j"> 'flr-outfile.dat' processFixLenFile 'flr-infile.dat' NB. returns number of bytes written
720</langsyntaxhighlight>
 
=={{header|jq}}==
Line 735:
For the sake of generality, we define `cut` with an argument corresponding to the number of columns. To illustrate that an efficient recursive definition is possible, we define an inner helper function, `c`, with arity 0, as currently jq's tail-call optimization is restricted to zero-arity filters:
 
<langsyntaxhighlight lang="jq">def cut($n):
def c: if length==0 then empty else .[:$n] , (.[$n:] | c) end;
c;
 
cut(80) | explode | reverse | implode;</langsyntaxhighlight>
 
=={{header|Julia}}==
The program reads from an "infile.dat" file created with dd, as described in the task instructions.
<langsyntaxhighlight lang="julia">
function processfixedlengthrecords(infname, blocksize, outfname)
inf = open(infname)
Line 757:
processfixedlengthrecords("infile.dat", 80, "outfile.dat")
</syntaxhighlight>
</lang>
 
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">-- prep: convert given sample text to fixed length "infile.dat"
local sample = [[
Line 1...1.........2.........3.........4.........5.........6.........7.........8
Line 789:
 
-- output:
os.execute("dd if=outfile.dat cbs=80 conv=unblock")</langsyntaxhighlight>
{{out}}
<pre>8.........7.........6.........5.........4.........3.........2.........1...1 eniL
Line 807:
Form Buffer object (hold a memory block) we can read a byte at offset. So Print Eval(Line80,3) return the 4th byte, and Return Line80, 2:=255,5:=0 set two bytes (unsigned, we place any number and interpreter convert it to byte).
 
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module FixedFile {
Read fixed$
Line 898:
FixedFile "fixed.random"
 
</syntaxhighlight>
</lang>
===Forth Blocks===
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Form 80,50
Print "Forth's Blocks"
Line 1,022:
Page1=NewBlock()
Return
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
 
<syntaxhighlight lang="mathematica">
<lang Mathematica>
FixedRecordReverse[inFile_File, outFile_File, length_ : 80] :=
Module[{inStream, outStream, line, byte},
Line 1,052:
RunProcess[{"dd", "if=" <> outFile[[1]], "cbs=" <> ToString[length], "conv=unblock"}, "StandardOutput"]
];
</syntaxhighlight>
</lang>
 
This function will both return the reversed string in the notebook AND write the record to outfile.dat:
Line 1,076:
 
=={{header|Neko}}==
<syntaxhighlight lang="actionscript">/**
<lang ActionScript>/**
fixed length records, in Neko
*/
Line 1,114:
}
file_close(input)
file_close(output)</langsyntaxhighlight>
 
{{out}}
Line 1,136:
===Task: fixed length records===
 
<langsyntaxhighlight Nimlang="nim">import algorithm
 
proc reverse(infile, outfile: string) =
Line 1,155:
raise newException(IOError, "truncated data when writing")
 
reverse("infile.dat", "outfile.dat")</langsyntaxhighlight>
 
{{out}}
Line 1,170:
 
===Bonus: Forth blocks===
<langsyntaxhighlight Nimlang="nim">import strutils
 
const EmptyRecord = repeat(' ', 64)
Line 1,224:
when isMainModule:
textToBlock("block1.txt", "block.dat")
blockToText("block.dat", "block2.txt")</langsyntaxhighlight>
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">program reverseFixedLines(input, output, stdErr);
const
lineLength = 80;
Line 1,248:
writeLn();
end;
end.</langsyntaxhighlight>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">open $in, '<', 'flr-infile.dat';
open $out, '>', 'flr-outfile.dat';
 
Line 1,258:
print reverse($record)."\n" # display reversed records, line-by-line
}
close $out;</langsyntaxhighlight>
{{out}}
<pre>8.........7.........6.........5.........4.........3.........2.........1...1 eniL
Line 1,274:
===There Is More Than One Way To Do It===
Read with standard <> using $/ set to a ref-to-int to read a fixed block size.
<langsyntaxhighlight lang="perl">{
local ($/, @ARGV) = (\80, 'infile.dat');
open my $out, '>', 'outfile.dat' or die $!;
print $out scalar reverse while <>; # can read fixed length too :)
close $out;
}</langsyntaxhighlight>
Slurp and reverse each line in place.
<langsyntaxhighlight lang="perl">use Path::Tiny;
path('outfile.dat')->spew(path('infile.dat')->slurp =~ s/.{80}/reverse $&/gesr);</langsyntaxhighlight>
Double reverse.
<langsyntaxhighlight lang="perl">use Path::Tiny;
path('outfile.dat')->spew(reverse unpack '(a80)*', reverse path('infile.dat')->slurp);
</syntaxhighlight>
</lang>
Bonus round: convert the sample file to Forth Block format.
<langsyntaxhighlight lang="perl">use Path::Tiny;
path('outfile.dat')->spew(pack '(A64)16', split /\n/, path('sample.txt')->slurp);</langsyntaxhighlight>
Bonus Round: convert Forth Block format to plain text format.
<langsyntaxhighlight lang="perl">use Path::Tiny;
path('sample2.txt')->spew(map "$_\n", unpack '(A64)16', path('outfile.dat')->slurp);</langsyntaxhighlight>
 
=={{header|Phix}}==
Line 1,298:
never really designed for fixed length record handling and for me, for this task, their limits
outweight any advantages. To simplify matters, this creates any files needed on the fly.
<!--<langsyntaxhighlight Phixlang="phix">(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- file i/o</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">sample_text</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
Line 1,373:
<span style="color: #7060A8;">pp</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lines</span><span style="color: #0000FF;">,{</span><span style="color: #004600;">pp_Nest</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">})</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">delete_file</span><span style="color: #0000FF;">(</span><span style="color: #000000;">indat</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (for consistent 2nd run)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 1,419:
 
=={{header|Python}}==
<syntaxhighlight lang="python">
<lang Python>
infile = open('infile.dat', 'rb')
outfile = open('outfile.dat', 'wb')
Line 1,432:
infile.close()
outfile.close()
</syntaxhighlight>
</lang>
 
Output:
Line 1,456:
Essentially the same as task [[Selective_File_Copy]] except more boring.
 
<syntaxhighlight lang="raku" perl6line>$*OUT = './flr-outfile.dat'.IO.open(:w, :bin) orelse .die; # open a file in binary mode for writing
while my $record = $*IN.read(80) { # read in fixed sized binary chunks
$*OUT.write: $record.=reverse; # write reversed records out to $outfile
$*ERR.say: $record.decode('ASCII'); # display decoded records on STDERR
}
close $*OUT;</langsyntaxhighlight>
{{out}}
<pre>8.........7.........6.........5.........4.........3.........2.........1...1 eniL
Line 1,474:
 
=={{header|REBOL}}==
<syntaxhighlight lang="rebol">
<lang REBOL>
inp: open %infile.dat
out: open/new %outfile.dat
Line 1,482:
close inp
close out
</syntaxhighlight>
</lang>
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX pgm reads fixed─length 80 byte records; reverses each record, displays to term. */
iFID= 'FIXEDLEN.TXT' /*the file's filename (used for input).*/
call charin iFID, 1, 0 /*open the file, point rec pointer to 1*/
Line 1,495:
do k=1 for # /* [↓] process all the records read. */
say reverse(@.k) /* reverse a record and write to term. */
end /*k*/ /*stick a fork in it, we're all done. */</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default input file:}}
{{out}}
Line 1,511:
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">open("outfile.dat", "w") do |out_f|
open("infile.dat") do |in_f|
while record = in_f.read(80)
Line 1,518:
end
end # both files automatically closed
</syntaxhighlight>
</lang>
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">use std::fs::File;
use std::io::prelude::*;
use std::io::{BufReader, BufWriter};
Line 1,545:
Err(error) => eprintln!("I/O error: {}", error),
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,562:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">chan configure stdin -translation binary
chan configure stdout -translation binary
 
Line 1,572:
# while {[set line [read stdin 80]] ne ""} {
# puts -nonewline [string reverse $line]
# }</langsyntaxhighlight>
 
{{out}}
Line 1,589:
=={{header|Wren}}==
{{libheader|Wren-str}}
<langsyntaxhighlight lang="ecmascript">import "io" for File
import "/str" for Str
 
Line 1,600:
}
records = File.read("outfile.dat")
for (record in Str.chunks(records, 80)) System.print(record)</langsyntaxhighlight>
 
{{out}}
Line 1,617:
===Bonus round===
{{libheader|Wren-ioutil}}
<langsyntaxhighlight lang="ecmascript">import "/ioutil" for File, FileUtil
import "/str" for Str
 
Line 1,648:
blockToText.call("data.blk", "data.txt")
textToBlock.call("data.txt", "data2.blk")
System.print(FileUtil.areDuplicates("data.blk", "data2.blk"))</langsyntaxhighlight>
 
{{out}}
Line 1,660:
Line 1...1.........2.........3.........4.........5.........6.........7.........8Line 2 Line 3 Line 4 Line 6 Line 7 Indented line 8............................................................Line 9 RT MARGIN
</pre>
<langsyntaxhighlight lang="zkl">File("infile.dat","rb") // could contain nulls and newlines
// Since we are writing to a ASCII terminal, ignore nulls
.walker(3).chunk(80,String).pump(Console.println,"reverse"); // 3-->read chars</langsyntaxhighlight>
{{out}}
<pre>
Line 1,676:
</pre>
To write to a file (as one big line), preserving nulls:
<langsyntaxhighlight lang="zkl">in,out := File("infile.dat","rb"), File("outfile.dat","wb");
in.walker(0).chunk(80).pump(out,"reverse"); // may contain nulls and newlines
// 0-->read bytes, chunk to list of bytes, reverse and write the bytes
in.close(); out.close();</langsyntaxhighlight>
outfile.dat:
{{out}}
Line 1,686:
</pre>
<b>Bonus Round</b>
<langsyntaxhighlight lang="zkl">// read block file (as in read a file of blocks) to text
fcn readFourthBlock(inFileNm){
out,f,buf := Sink(String), File(inFileNm,"rb"), Data(1024);
Line 1,694:
}
f.close(); out.close();
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">// read text file and write as block to file
fcn formatToFourthBlock(inFileNm,outFileNm){
n,blk,in,out := 0, Data(), File(inFileNm,"r"), File(outFileNm,"wb");
Line 1,705:
if(blk) out.write(blk, " "*(1024 - blk.len()));
f.close(); out.close();
}</langsyntaxhighlight>
10,333

edits