XEDitor like ed, but in perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting XEDitor like ed, but in perl
# 1  
Old 12-02-2006
Error XEDitor like ed, but in perl

some very very small bugs
but is working very fine
questions?
h - for help ;D
Smilie enourmous .. sorry
Code:
#!/usr/bin/perl
# xed Prompt Text Editor Like ed
# by Sendai
# Don't Remove this header
# you can change the source but credits to me o/
# include 
#   cammelpop by myself (usefull no ?)
#   cammelpush by myself 

$popen=join(" ",@ARGV);
die "Usage :\n   ./xed ARCHIVENAME\n" unless $popen ne "";
while($prompt ne "q"){
print('>');
chop($prompt=<stdin>);
@v=split(//,$prompt);
$xor=$v[0]; # xor is the first char
@v=reverse(@v);
pop(@v);
@v=reverse(@v);
$inx=join("",@v);
$inx=int($inx);  #inx is the value
print "xed help menu
q  - quit
h  - this help menu
r  - read archive
rX - read archive line X
w  - write in EOF
wX - write in line X
d  - delete all lines
dX - delete line X
aX - add a line in X
f  - find a word in document
X is any integer value
" if($prompt eq "h") ;
	if($xor eq "r"){
	red($popen) if($inx==0);
	lred($popen,$inx) if($inx!=0);	
	}elsif($xor eq "w"){
	wrt($popen) if($inx==0);
	wrtx($popen,$inx) if($inx!=0);
	}elsif($xor eq "d"){
	dl($popen) if($inx==0);
	dlx($popen,$inx) if($inx!=0);
	}elsif($xor eq "a"){
	adx($popen,$inx) if($inx!=0);
	}elsif($xor eq "f"){
	fini($popen) if($inx==0);		
	}

}

#head on

sub fini{
$fl=@_[0];
print "Search>";
chop($sh=<stdin>);
open(FD,"< $fl")|| print "Can't open $fl to RDONLY\n";
@lines=<FD>;
close(FD);
$x=1;
foreach(@lines){
	if($_=~/$sh/){
	print "$x:$_";
	}
$x++;
}
print "\n";
}

sub adx{
$fl=@_[0];
$x=@_[1];
open(FD,"< $fl")|| print "Can't open $fl to RDONLY\n";
@lines=<FD>;
close(FD);
print "Text>";
$tx=<stdin>;
@lines=cammelpush(@lines,$x,$tx);
open(FD,"> $fl")|| print "Can't open $fl to WRONLY\n";
print FD @lines;
close(FD);
}

sub dlx{
$fl=@_[0];
$x=@_[1];
open(FD,"< $fl")|| print "Can't open $fl to RDONLY\n";
@lines=<FD>;
close(FD);
@lines=cammelpop(@lines,$x);
open(FD,"> $fl")|| print "Can't open $fl to WRONLY\n";
print FD @lines;
close(FD);
}

sub dl{
$fl=@_[0];
open(FD,"> $fl")|| print "Can't open $fl to WRONLY\n";
print FD "";
close(FD);
}

sub wrtx{
#ok
$x=pop; #line to put
$fl=pop; #file
open(FD,"< $fl")||print "Can't open $fl to RDONLY\n";
@lines=<FD>;
close(FD);
$y=$x-1;
print "$x:$lines[$y]";
print "NewText:";
$tx=<stdin>;
$lines[$y]=$tx;
open(FD,"> $fl")||print "Can't open $fl to WRONLY\n";
print FD @lines;
close(FD);
#open(FD,">> $fl");
#	foreach(@lines){
#	print FD "$_";
#	}
#close(FD);
}

sub wrt{
$fn=@_[0];
open(FD,">> $fn")|| print "Can't open $fn to WRT\n";
print "Text>";
$tx=<stdin>;
print FD "$tx";
close(FD);
}

sub lred{
#ok
$fn=@_[0];
$d=@_[1];
open(FD,"< $fn")|| print "Can't open $fn to RDONLY\n";
@lines=<FD>;
close(FD);
$d--;
print "$lines[$d]";

}

sub red{
#ok
$fn=@_[0];
open(FD,"< $fn")|| print "Can't open $fn to RDONLY\n";
@lines=<FD>;
close(FD);
$x=0;
foreach(@lines){
$x++;
print "$x:$_";

}
print "\n";
}

sub cammelpush{
#cammelpush(@array,$INTEGER,$value);
#push a VALUE in @array[$integer]
#by sendai
$vl=pop; #string
$cod=pop; #int
@ar=@_; #array
$as=push(@ar,"q");
pop(@ar);
if($as < $cod){
	print "Inexistent Line :$cod";
}else{
	#breack array in $cod
	while($cod != $as){ 
	$s=pop(@ar);
	push(@void,$s);
	$as=push(@ar,"q");
	pop(@ar);
	}

push(@ar,$vl);
	while(@void){
	$s=pop(@void);
	push(@ar,$s);
	}
}

return @ar;
}


sub cammelpop{
#cammelpop(@ARRAY,$INTEGER);
$x=pop;
$x++;
@ar=@_;
$as=push(@ar,"q");
pop(@ar);
if($as < $x){
	print "Inexistent Line :$cod";
}else{
	#breack array in $cod
	while($x != $as){ 
	$s=pop(@ar);
	push(@void,$s);
	$as=push(@ar,"q");
	pop(@ar);
	}
pop(@ar);
	while(@void){
	$s=pop(@void);
	push(@ar,$s);
	}
return @ar;
}
}


Last edited by sendai; 12-02-2006 at 06:23 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Programming

Perl: restrict perl from automaticaly creating a hash branches on check

My issue is that the perl script (as I have done it so far) created empty branches when I try to check some branches on existence. I am using multydimentional hashes: found it as the best way for information that I need to handle. Saing multidimentional I means hash of hashes ... So, I have ... (2 Replies)
Discussion started by: alex_5161
2 Replies

3. Shell Programming and Scripting

Perl :: reading values from Data Dumper reference in Perl

Hi all, I have written a perl code and stored the data into Data structure using Data::Dumper module. But not sure how to retreive the data from the Data::Dumper. Eg. Based on the key value( Here CRYPTO-6-IKMP_MODE_FAILURE I should be able to access the internal hash elements(keys) ... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. UNIX for Advanced & Expert Users

perl and HP-UX : instmodsh in combination with software depot : update inventory for installed Perl

we create a HP-UX software depot with a new perl-modul. after installation of the software depot, the perl module i can't find with instmodsh in the inventory for installed Perl modules. - i have learned of using instmodsh command : i find out what modules are already installed on my system. ... (0 Replies)
Discussion started by: bora99
0 Replies

5. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

6. Shell Programming and Scripting

Hidden Characters in Regular Expression Matching Perl - Perl Newbie

I am completely new to perl programming. My father is helping me learn said programming language. However, I am stuck on one of the assignments he has given me, and I can't find very much help with it via google, either because I have a tiny attention span, or because I can be very very dense. ... (4 Replies)
Discussion started by: kittyluva2
4 Replies

7. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

8. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

9. Shell Programming and Scripting

Passing date formats in Perl: i.e. Jul/10/2007 -> 20070710 (yyyymmdd) - Perl

Hi , This script working for fine if pass script-name.sh Jul/10/2007 ,I want to pass 20070710(yyyymmdd) .Please any help it should be appereciated. use Time::Local; my $d = $ARGV; my $t = $ARGV; my $m = ""; @d = split /\//, $d; @t = split /:/, $t; if ( $d eq "Jan" ) { $m = 0 }... (7 Replies)
Discussion started by: akil
7 Replies

10. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies
Login or Register to Ask a Question