Помощ - Търси - Регистрирани - Календар
Пълна версия: echo
UniBG Forums > Дискусии > Dexter's Lab > Програмиране
demond
ok, stiga s glupavi anketi i rev za domashni

da se napishe "echo" koeto mozhe da se izvika po 2 nachina:
CODE
echo <infile >outfile
echo infile outfile


minimalnata programa shte poluchi nagrada snimka s avtograf ot miss unibg
lorddoskias
CODE
if($argc < 3) {
  die("You should have at least input and output file");
}

if($argv[1][0] == '<' && $argv[2][0] == '>') {
  $in_file = substr($argv[1], 1);
  $out_file = substr($argv[2], 1);
  $dir = getcwd();
  $file = file($in_file);
  $fp = fopen("$dir"."\\"."$out_file", "w");
    foreach($file as $line) {
      fwrite($fp, $line);
    }
    die();
  }
  else {
  $in_file = ($argv[1]);
  $out_file = ($argv[2]);
  $dir = getcwd();
  $file = file($in_file);
  $fp = fopen("$dir"."\\"."$out_file", "w");
    foreach($file as $line) {
      fwrite($fp, $line);
    }
  die();
  }


samo deto 6te trqbva da se podava "<blah" ">blah"

Ina4e tova nqkkva zada4a za glavoblyskanica sys shell redirectors li e smile.gif?
blah
CODE
#!/usr/bin/env python

import sys

try:
  input = open(sys.argv[1], 'r')
except (IndexError, IOError):
  input = sys.stdin

try:
  output = open(sys.argv[2], 'w')
except (IndexError, IOError):
  output = sys.stdout

for line in input:
  output.write(line)
demond
QUOTE(lorddoskias @ Mar 8 2007, 01:59 PM) *
samo deto 6te trqbva da se podava "<blah" ">blah"

Ina4e tova nqkkva zada4a za glavoblyskanica sys shell redirectors li e smile.gif?


ne; programite izobshto ne vizhdat redirection, zatova i tvojata versia niama da raboti; redirection se obsluzhva ot samia shell (sh/csh/ksh etc. za Linux/UNIX, cmd.exe za Windows)

osven tova kogato otvariash file ne e neobhodimo da posochvash full pathname; ako niama path a samo file name, po default se izpolzva current directory
demond
QUOTE(blah @ Mar 8 2007, 02:57 PM) *
CODE
for line in input:
  output.write(line)


ne che znam Python, no tova input ne triabva li da e input.read() ili neshto takova?

malko me symniava prost identifier input da se interpretira kato chetene i dazhe avtomatichno razbivane na prochetenoto po line breaks
blah
QUOTE(demond @ Mar 9 2007, 06:34 AM) *
ne che znam Python, no tova input ne triabva li da e input.read() ili neshto takova?

malko me symniava prost identifier input da se interpretira kato chetene i dazhe avtomatichno razbivane na prochetenoto po line breaks


http://docs.python.org/tut/node9.html#SECT...000000000000000

QUOTE
An alternate approach to reading lines is to loop over the file object. This is memory efficient, fast, and leads to simpler code:


>>> for line in f:
print line,
demond
QUOTE(blah @ Mar 9 2007, 06:37 AM) *


ah, malkite chudesa na scriptovite ezici...

dotuka blah pecheli

niakoj s ne-scriptova programa?
foobar
Pak e scriptov ezik, taka che sigurno ne triabva da se broi za nagradata smile.gif
CODE
#!/usr/bin/perl
open STDOUT, ">", "$ARGV[1]";
print while <>;
demond
QUOTE(foobar @ Mar 10 2007, 06:14 PM) *
CODE
#!/usr/bin/perl
open STDOUT, ">", "$ARGV[1]";
print while <>;


write-only ezik triabva da se obiasniava

zashto ima > i argv[1] a niama < i argv[2]?

chovkite izobshto ne triabva da gi ima, veche stana duma che programite ne gi vizhdat
foobar
Pri perl arrays sa zero based.
CODE
open STDOUT, ">", "$ARGV[1]";

Tozi red prenasochva stdout kym vtoria argument (ako go ima), zatova ima i chavka. Ako argumenta go niama se otchita greshka i syotvetno STDOUT ne se redirectva vyobshte.

CODE
print while <>

Tova chete po default ili ot STDIN ili ot pyrvia argument (ako go ima) i pishe v STDOUT (prenasochen ili ne).


Btw shtom za teb perl e write-only ezik, triabvashe da kazhesh v nachaloto na zadachata che tyrsish minimalno reshenie koeto _ti_ da razberesh.
demond
Perl ne predava imeto na programata v argv[0], za razlika ot vsichki drugi ezici? bih kazal che osven za men, oshte za mnogo drugi hora e write-only smile.gif

i tova <> niama li da prochete dazhe i 2-ria argument? ako da, programata ti e greshna zashtoto 2-ria argument mozhe da e file kojto syshtestvuva i ne e prazen
foobar
demond, izumitelno e kak opredeliash koe e greshno i pravilno dori sled kato priznavash che perl e write-only ezik za teb.
Prosto go testvai.
CODE
me@home:~>cat test.pl
#!/usr/bin/perl
open STDOUT, ">", "$ARGV[1]";
print while <>;

me@home:~>cat test.in
aaa
aaaa
vvvv

me@home:~>cat test.out
cat: test.out: No such file or directory

me@home:~>./test.pl test.in
aaa
aaaa
vvvv

me@home:~>./test.pl < test.in
aaa
aaaa
vvvv

me@home:~>./test.pl test.in test.out

me@home:~>cat test.out
aaa
aaaa
vvvv

me@home:~>./test.pl test.in >> test.out

me@home:~>cat test.out
aaa
aaaa
vvvv
aaa
aaaa
vvvv
demond
Perl e write-only ezik za vseki kojto ne znae Perl i dazhe za tezi koito go znajat samo dotolkova che da mogat da napishat samo naj-elementarni scriptove (kym koito spadam i az); ne mozhesh da namerish chovek spadasht kym edna ot tezi 2 kategorii kojto da ti razchete programata bez da se rovi v docs - koeto btw ne mozhe da se kazhe za nikoj drug ot populiarnite ezici

v momenta niamam Perl podryka i ne moga da testvam; a tvoja test - ili pone tova koeto si pastnal - ne pokazva kakvo shte stane ako otgovora na 2-ria mi vypros e "da" (ako e "ne", potvyrdi che e "ne"); no dazhe i v tozi konkreten sluchaj da raboti pod Linux, nishto ne ti garantira che pod druga OS shte raboti - ponezhe niamash garancia che vsiaka OS shte otrezhe sydyrzhanieto na syshtestvuvasht file za kojto sa buferirani zajavki za chetene i pisane
foobar
Otgovora na vtoriat ti vypros e "po princip, da". No zaradi purvia red, vtoria argument veche ne se priema kato vhod.
Imeto na programata v perl se vzima ot $0.

Kolkoto za write-only, razbira se che mozhe da se napishe po-iasno, po-chetlivo i po-dokumentirano, no ti popita za "minimalna" programa.

Mezdu drugoto ako iskash submissions samo na c/c++ i tcl da beshe kazal smile.gif
CODE
me@home:~>cat test.out
bbbb
ccc
me@home:~>./test.pl test.in test.out
me@home:~>cat test.out
aaa
aaaa
vvvv
demond
QUOTE(foobar @ Mar 11 2007, 12:23 PM) *
Otgovora na vtoriat ti vypros e "po princip, da". No zaradi purvia red, vtoria argument veche ne se priema kato vhod.


hmm verno? mozhesh li da posochish docs koito izrichno kazvat tova? neshto ne mi se viarva chak tolkova slozhno implicitno interpretirane na <>, no da vidim

QUOTE
Kolkoto za write-only, razbira se che mozhe da se napishe po-iasno, po-chetlivo i po-dokumentirano, no ti popita za "minimalna" programa.


da de, no misylta mi beshe che Perl programite izobshto se pishat nechetlivo po-skoro kato pravilo otkolkoto izkluchenie - ponezhe samia sintaksis na ezika pozvoliava nechetlivo pisane v mnogo po-goliama stepen otkolkoto sintaksisa na povecheto drugi populiarni ezici

QUOTE
Mezdu drugoto ako iskash submissions samo na c/c++ i tcl da beshe kazal smile.gif


a ne, az ne diskriminiram po ezik, pone ne v tozi sluchaj smile.gif

kojto iska mozhe da napishe i mirc script (btw niakoj tuk mi beshe kazal che uchi Ada - iavno horata sa dosta diversificirani po ezici)
foobar
Eto tuk ima docs kak raboti <> perlopentut.
Sled kato sme otvorili file handle s ">" ("w" mode v fopen) vtoriat file e veche prazen, taka che ne se chete ot <>.

Za perl si prav che triabva self-discipline za golemi proekti, no ot druga strana e mnogo udobno za malki i byrzi reshenia.

Cheers smile.gif
demond
QUOTE(foobar @ Mar 11 2007, 03:21 PM) *
Eto tuk ima docs kak raboti <> perlopentut.
Sled kato sme otvorili file handle s ">" ("w" mode v fopen) vtoriat file e veche prazen, taka che ne se chete ot <>.


merci za infoto, no nishto tam ne potvyrzhdava izrichno tova koeto ti obiasni (koeto ne znachi che to ne e viarno, prosto che ne go dokazva); naj-blizkoto po smisyl e:
QUOTE
You are welcome to pre-process your @ARGV before starting the loop to make sure it's to your liking.

no kakto i da e, da ne se zadylbochavame poveche; priemame che pone pod Linux raboti korektno i bie versiata na blah po dylzhina smile.gif

neka da izchakame i drugi eventualni pretendenti; posle shte pokazha C++ versia na 1 normalen red smile.gif
demond
CODE
#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
   (argc>2? ofstream(argv[2]) : cout) << (argc>1? ifstream(argv[1]) : cin) .rdbuf();
}
Това е семпла версия на форума. За да видиш пълната версия, която има повече информация, по-добра подредба и снимки, натисни тук.
Invision Power Board © 2001-2008 Invision Power Services, Inc.