[Powered by Google Translate] Tommy: Në këtë video, ne do të mësojnë në lidhje
Përcjellin dhe tuba.
Deri tani, ne kemi qenë duke përdorur funksione si printf të
Të dhënat e prodhimit në terminal dhe funksionet si getString
për të lejuar përdoruesit për të siguruar të dhëna të tonë
Programi i përdorur tastierën.
Le të shpejt të marrë një sy në një program që merr një linjë të
input nga përdoruesit dhe pastaj rezultatet atë.
>> On line 7, ne jemi duke bërë që përdoruesit për një varg, dhe
pastaj në linjë 8, ne jemi shtypjen atë nga mbrapa.
Le të hartojnë dhe të drejtuar programin tonë.
Madhe.
Vargu kemi dhënë u bëri jehonë prapa
për ne në terminalin e.
Kjo ka ndodhur për shkak se funksioni printf shkroi në një
rrymë quajtur nga standarde, ose s-T-D-jashtë.
Kur diçka është shkruar për stdout, kjo është nga default
shfaqet nga terminali.
>> Pra, kjo është e gjitha mirë dhe të mirë, por çka nëse, në vend të thjesht
shfaqur string, ne kemi kërkuar për të shpëtuar atë në një skedar?
Për shembull, ne mund të dëshironi të mbani mend saktësisht se çfarë tonë
Programi i bëri kur ne ia dha një kontribut të veçantë më vonë.
Një qasje e tillë do të jetë për të bërë këtë në C programin tonë, duke përdorur
disa funksione të veçanta për të shkruar për të dosjeve që ne do të
shohim në një tjetër video.
Edhe më e lehtë, edhe pse, do të jetë në një farë mënyre
syswrite përcjellim në një skedar.
Në këtë mënyrë, kur shkruan për printf stdout, përmbajtja do të
të jetë e shkruar në një skedar në vend se
shfaqet nga terminali.
Ne mund të bëjmë vetëm se duke shtuar një shenjë të madhe-se, e ndjekur
nga një emër file, për komandën që ne përdorim për të ekzekutuar programin tonë.
>> Pra, në vend se thjesht ekzekutimin. / Redirect, ne mund të
drejtuar. / përcjellëse, e ndjekur nga një shenjë e madhe se, e ndjekur nga
filename, si file.txt.
Le të shohim se çfarë ndodh.
OK.
Vini re se këtë herë, asgjë nuk ishte shfaqur në terminalin,
por ne nuk kemi modifikuar përmbajtjen e tona
Programi C në të gjitha.
Le të shqyrtojmë tani përmbajtjen e kësaj directory me ls.
>> Dakord.
Ne tani kemi një skedë të re në directory tonë të quajtur file.txt,
i cili është emri i file kemi furnizuar, kur ne u tona
Redirect program.
Le të hapur file.txt.
Dhe këtu, ne mund të shohim se Syswrite nga përcjellim ishte
shkruar në dosjen e quajtur file.txt.
Pra, le të drejtuar komandën e mëparshme përsëri, por të furnizuar një
input ndryshe këtë herë.
Rregull.
Le të marrin një vështrim në file.txt tani.
>> Ne mund të shohim këtu se dosja ka qenë overwritten, në mënyrë tona
input origjinale nuk ekziston më.
Në qoftë se ne duam të append në vend të këtij file, duke e re
input poshtë përmbajtjen e dosjes ekzistuese, ne mund të
përdorin dy të madhe-se shenjat në vend të vetëm një.
Le të provoni këtë.
Tani, në qoftë se ne hapim file.txt përsëri, ne mund të shohim të dy tonë
Linjat e input.
Në disa raste, ne mund të dëshironi të hidhni çdo
Prodhimi i programit tonë.
Në vend se të shkruarit e prodhimit në një skedar dhe pastaj fshirjes
file kur ne jemi bërë me të, ne mund të shkruaj një të veçantë
file i quajtur / dev / null.
Kur çdo gjë është shkruar për të / dev/null--
ose thjesht devnull për të shkurtër -
ajo është hedhur poshtë automatikisht.
Pra, mendoj se e devnull si një vrimë të zezë për të dhënat tuaja.
>> Deri tani kemi parë se si shenjë e madhe se mund të përcjellim
Syswrite, le të shohim se si ne mund të përcjellim standarde në -
ose S-t-D-në -
analog i stdout.
Ndërsa funksionet printf pëlqen të shkruaj në lumë quajtur
, Syswrite getString dhe funksione të ngjashme të lexuar nga lumë
STDIN quajtur, e cila, si parazgjedhje, është lumë i
karaktere shtypur në tastierë.
Ne mund të përcjellim STDIN duke përdorur më pak se shenjë, të ndjekur
nga një filename.
Tani, në vend se duke bërë përdorues për kontributin në nivelet
terminali, një program do të hapë dosjen ne specifikuar dhe të përdorni
linjat e saj si input.
>> Le të shohim se çfarë ndodh.
Madhe.
Linja e parë e file.txt është shtypur në terminalin
sepse ne jemi duke bërë thirrje getString herë.
Nëse do të kishim një tjetër thirrje për getString në programin tonë,
Linja tjetër e file.txt do të kishte qenë përdorur si
input asaj thirrjeje.
Përsëri, ne nuk kemi modifikuar programin tonë C në të gjitha.
Ne jemi vetëm duke ndryshuar mënyrën se si ne të drejtuar atë.
Dhe gjithashtu mos harroni, ne nuk kemi ridrejtuar syswrite këtë kohë,
kështu që output e programit ishte ende
shfaqet në terminal.
Ne mund, sigurisht, të përcjellim si STDIN
dhe syswrite si kjo.
Tani, file2.txt përmban vijën e parë të file.txt.
>> Pra, duke përdorur këta operatorë, ne kemi qenë në gjendje të lexojnë dhe
shkruar nga fotografi tekst.
Tani, le të shohim se si ne mund të përdorni prodhimin e një programi si
të dhëna në një tjetër program.
Kështu që këtu është një tjetër program të thjeshtë C I
kanë quajtur këtu hello.c.
Siç mund ta shikoni, kjo thjesht rezultatet "Hi
atje! "të përdoruesit.
Nëse unë dua të përcjellim të përdorin si input prodhimin e hello -
Një tjetër program -
Unë mund të parë të përcjellim syswrite e përshëndetje në një skedar të quajtur
input.txt, pastaj përcjellëse STDIN e përcjellim me atë të njëjtë
file - input.txt.
Kështu që unë mund të bëj. / Përshëndetje> input.txt.
Shtypni Enter për të ekzekutuar këtë.
Ndjekur nga. / Redirect <
input.txt, dhe ekzekutojë se.
Pra, ne mund të shkurtojnë këtë pak me një pikëpresje, e cila lejon
na për të drejtuar dy ose më shumë komandat në të njëjtën linjë.
Kështu që unë mund të them,. / Përshëndetje> input.txt, pikëpresje,
. / Përcjellëse <input.txt.
>> Pra kjo punon, por ajo ende ndihet mjaft pashije.
Unë do të thotë, nuk kemi me të vërtetë nevojë për këtë skedar teksti ndërmjetësues që është
nuk është e nevojshme pas përcjellëse shkon?
Për fat të mirë, ne mund të shmangur këtë skedë ekstra tekst duke përdorur atë që është
quajtur një tub.
Nëse unë them, / Përshëndetje |.. / Përcjellëse, atëherë syswrite e
programi në të majtë -
në këtë rast, hello -
do të përdoret si input standard për
Programi në të djathtë.
Në këtë rast, përcjellëse. Pra, le të drejtuar këtë.
>> Nuk shkojmë.
Ne mund të shohim se prodhimi e Hello është përdorur si input
për përcjellëse.
Nga stringing së bashku duke përdorur komandat tuba, ne formojnë atë që është
quajtur një tubacion, që prodhimi ynë është në thelb duke lëvizur
përmes një sekuencë të komandave.
Duke përdorur tuba, ne mund të bëjmë disa cool stuff pa nevojë për
shkruani ndonjë kod në të gjitha.
Për shembull, le të thonë se ne duam të dimë se sa fotografi janë
brenda këtë directory.
Duke përdorur një tub, ne mund të kombinohen komandën ls me wc -
ose Wordcount -
komandës.
Ls do të prodhimit çdo skedar në directory për stdout dhe
WC do të na tregoni se sa rreshta janë dhënë në atë anë STDIN.
Pra, nëse themi ls | wc-l -
furnizuar-l flamurin për të treguar atë wc për të numëruar rreshta -
ne mund të shohim saktësisht se sa fotografi janë
në dosjen aktuale.
>> Pra, le të marrin një vështrim në një shembull më shumë.
Unë kam këtu një skedar të quajtur students.txt,
me një listë të emrave.
Megjithatë, këto emra nuk janë në asnjë mënyrë të gjithë, dhe kjo duket
si disa emra janë të përsëritura.
Ajo që ne duam është një listë e emrave unike në alfabetit
mënyrë, ruhen në një file të quajtur final.txt.
Ne mund të, natyrisht, të shkruaj një program C për të bërë këtë për ne.
Por ajo do të marrë të panevojshme
komplekse shumë shpejt.
Le të përdorin në vend të tubave dhe disa Built-in-tools për të zgjidhur
ky problem.
>> Gjëja e parë që ne duhet të bëni është të lexuar students.txt file.
Komanda mace do të bëjë vetëm atë.
Ajo do të lexoni në dosjen e specifikuar dhe të shkruajnë
Përmbajtja e saj në stdout.
Pasi kemi lexuar skedar teksti, ne do
doni të lloj emrat.
Komanda lloj mund të trajtojë këtë për ne.
Rendit do të prodhimit linjë furnizuar me anë të STDIN stdout
në mënyrë renditura.
Në mënyrë që të furnizimit me përmbajtjen e students.txt në
STDIN Rendit, ne mund të përdorni një tub për të kombinuar mace dhe lloj.
Kështu që unë mund të ekzekutojë cat students.txt | lloj dhe
shtypni Enter.
Dhe tani, ne shohim përmbajtjen e students.txt në
sipas rendit alfabetik.
>> Pra, le të shtoni një tjetër komandë -
uniq, ose unik -
të tubacionit tonë.
Si ju mund të me mend, uniq, kur furnizuar një rend të renditura
Linjat nëpërmjet STDIN, do të prodhimit linjat unike.
Deri tani ne kemi students.txt cat
| Lloj | uniq.
Së fundi, ne mund të shpëtojë e prodhimit të tubacionit në një
fotografi nëpërmjet cat students.txt | lloj | uniq
> Final.txt.
Pra, në qoftë se ne e hapur deri final.txt, ne kemi pikërisht ajo që ne kemi qenë
duke kërkuar për:
një listë e emrave unik në rend alfabetik,
ruhen në një skedar teksti.
Nga rruga, ne gjithashtu mund të ketë thënë renditjes <
students.txt | uniq> final.txt për të bërë pikërisht
të njëjtën gjë, duke përdorur secili nga operatorët e kemi parë në
kjo video.
>> Emri im është Tommy, dhe kjo është CS50.