Merhaba, tekrar hoş geldiniz.
Bu konuşmada, şunları yapmak istiyorum Bir dosyadan
nasıl metin okuyabileceğimiz hakkında konuşmak için.
Şimdilik, biz gidiyoruz metin dosyalarını okumaya odaklanın.
Yani eğer karakter okumak istiyorsak bir metin dosyasından, birkaç
fonksiyon kullanacağız.
İlki fgetc olacak.
Bu, bir metinden bir karakter okuyacaktır okunmak üzere açılmış olan dosya.
Unutmayın, her zaman açmak zorundayız üzerinde herhangi bir dosya işlemi
gerçekleştirmeden önce dosyayı yukarı bu bir yeniden adlandırma veya
silme işlemidir ve ardından dosya açılamaz.
Ama eğer okuma yapmak istiyorsanız ve yazma veya ekleme yapmak
için o dosyayı açmamız gerekir.
Açabileceğimizi biliyoruz farklı modlara sahip dosyalar.
Bu durumda okumak için bir r veya r artı ile açmak için, ve sonra fgetc'yi
çağırmaya başlayabiliriz.
fgetc işlevi şunları alır dosya işaretçisini tek bağımsız
değişkeni olarak alır ve int türünde okunan karakter.
İşte bir örnek, bir mchar oluşturuyoruz int türünde ve fgetc pfile diyoruz.
Bir karakter okuyacak dosya işaretçisi olarak pfile ile mchar değişkenine
yerleştirin.
Pfile'ın zaten olduğunu düşünün dosya işaretçisine dönüşü açtı.
mchar in türündedir çünkü eof bizim özel karakterimiz olan
dosya sonu karakteridir, eğer dosyanın sonuna ulaşıldı.
Böylece her zaman şunu kontrol edebiliriz eof olup olmadığını görmek için tamsayı.
Ve eğer öyleyse, istemiyoruz artık okumak için,
artık fgetc'yi çağırmak istemiyoruz.
fgetc işlevi, şu şekildedir fgetc eşdeğeri de mevcuttur.
Yani getc neredeyse fgetc, sadece fgetc kullanmak istiyorsunuz.
Sanırım biraz daha fazla koruma.
getc ile, bir argüman gerektirir türünde bir dosya yıldızını döndürür ve
int türünde kırmızı karakterini döndürür.
Neredeyse fgetc ile aynıdır.
Aralarındaki tek fark getc'nin bir makro olarak uygulanabileceği
ve hatta makronun ne olduğunu biliyorum artık.
Bu yüzden biz de karakterleri okumak için fgetc işlevini
kullanıyoruz.
Bir dosyanın içeriğini okuyabilirsiniz.
Yine, gerekli olduğunda tarafından belirtilen dosyayı konumlandıran
bu geri sarma işlevi dosyanın başlangıcına işaret eder.
Yani geri sarmayı şu durumlarda kullanabilirsiniz tekrar okumak istersiniz.
Sadece geri sar deyin ve sonra dosya işaretçisi, oldukça basit.
İşte bir örnek.
Eklemek zorundasınız herhangi bir dosya işlemi
yaptığımızda standart io başlığı.
Ana fonksiyonumuzda, biz dosya işaretçimizi oluşturacağız.
Bunu null olarak başlatmak istersem ve bir tamsayı oluşturacağız.
Yapacağımız ilk şey f open çağrısını kullanarak
dosyayı açacağız ve şunu belirteceğiz dosyanın adını ve bunun okuma için olduğunu
belirteceğiz.
Bu, dosya işaretçimizi döndürecektir.
Yani şimdi fp işaretçimiz geçerli bir dosyaya işaret ediyor.
Dosya açılamadıysa. txt doğru yolda değilse
veya her neyse, null döndürür.
Yani null olup olmadığını kontrol etmek istiyorsunuz, fp'nin null olmadığından emin olun.
Eğer null ise, programdan çıkın.
Aksi takdirde, genellikle karakterleri okuyacaksanız, bunları bir döngü
içinde tutacaksınız.
Yani burada diyoruz ki c fgetc fp'ye eşittir, bu dosyamızdan bir karakter
okuyor, dosya işaretçisini bir tamsayı döndüren fgetc'ye
aktarır.
Unutmayın, döngüden çıkabiliriz Eğer döndürülen tamsayı dosyanın
sonu ise, çünkü dosyanın sonunu okumak için.
Aksi takdirde, sadece karakterimiz yüzde c ve c kullanarak.
Yapmak istediğimiz son şey dosyayı kapatmak istediğimizde, dosya
işaretçimizi null'a çevirir ve geri dönebiliriz.
Bunu kullanmayı deneyelim, şunları oluşturalım kod bloklarının içinde.
İşte kod blokları içindeki programımız.
Diyor ki, bu program Programın çalıştığı her yerde diskte bir dosya olmadığı
sürece çalışmaz.
Öncelikle bunu inşa edersek, Tamam inşa etmeli, çalıştırılabilir
bir dosya oluşturmalı sabit diskinizde bir yerde.
Bütün projelerimi nokta krediler dizinimin içinde.
Eğer indirmelerime gidersem dizinine giriyorum ve
proje adına gidiyorum, ki bu sadece bir test projenizi sakladığınız her yerde benimki
de test aşamasında.
Eğer teste gidersem, göreceksiniz ki bin dizininin içinde, debug'ın içinde çalıştırılabilir
dosyanız var.
İşte burada kendi eğer bir akraban varsa.
Path yani burada sadece bir yeni dosya ve bunu bir metin dosyası olarak alabiliriz, böylece bunu
bir metin olarak oluşturabilirim belge ve dosya olarak adlandırılmalıdır.
Ve sonra koyacağım İçinde bazı bilgiler var.
Sadece bazı veriler koyacağım örneğin merhaba bu Jason satır beslemesi.
Tamam, hayır, devam et, ve onu saklayacağım.
Bu dosya şurada bulunmalıdır bu programın çalışması için.
Ben de dosyayı oluşturdum.
Şimdi çalıştırdığımda, umarım az önce eklediklerimi okuyacak
ve çıktısını alacaktır.
Hata ve dosya açılıyor diyor dosyası böyle bir dosya dizini
yok ve bunun nedeni muhtemelen hata ayıklama klasöründe var.
Ve bu hata ayıklamada çalışmıyor.
Şimdi hata ayıklama modunda çalıştırmayı deneyelim ve Sanırım şimdi işe yarayabilir.
Hata ayıklama, başlat diyebiliriz.
Bu, yürütülebilir dosyayı arayacaktır hata ayıklama dizininde umarım.
Çalıştığından emin olmak istiyoruz.
Hala orada değil, bu yüzden çalıştırılabilir dosyanın nerede olduğunu bildiğinizden emin olun.
Başka bir yerde deneyelim ya da Daha iyisi, çalıştırılabilir dosyayı hata ayıklama içinde çalıştırabilirim
dizinine gidin ve orada bulmanız gerekir.
Yani buraya çift tıklarsam, aslında um duraklamıyor.
Birden ortaya çıktı.
Bunun için yapabileceğiniz şey geri
dönmek yerine sistem duraklat diyebilirsiniz ve çıkmayacaktır programı çalıştırana kadar.
Şimdi deneyelim.
Yani şimdi durakladı, değil mi programı çalıştırın.
Ve gördüğün şey şuydu, Merhaba, ben Jason.
Dosyayı bulabildi, Tamam çıktı, hayır çıktı
ve sonra durakladı.
Aksi takdirde, çalıştırdığınızda program, verileri çok hızlı
yazdırır ve programdan çıkar. Programın bittiğini.
Bu şekilde test edebilirsiniz.
Yürütülebilir dosyanın bulunduğu yerde saklanmalıdır. çalıştığı yerde saklanır.
Bir yerden kaçıyor olmalı. proje dizininizde başka bir yerde.
Nereden çalıştığından emin değilim.
Dosyayı taşımayı deneyebiliriz kaynak kodunun olduğu yere.
Buradan çalışıyor olabilir.
İşte buraya koyacağız.
Ve şimdi onu şu adresten çalıştırmayı deneyeceğiz Kimlik ve belki işe yarayacaktır.
Biz inşa etmiyoruz.
Onu çalıştırdık ve bulmayı başardı.
Görünüşe göre elimizde dosyayı kaynak kodun olduğu yerin içine
koymak için.
Yani o dosyayı koyduğumuz sürece Dosya. metnini proje dosyası
içinde görebileceksiniz.
Nasıl yapabileceğinize dair hızlı bir örnek bir dosyayı açıp tek karakterleri okumak,
en verimli yöntem değildir bir dosyadan okumanın bir yoludur çünkü genellikle
dizeleri okumak istersiniz.
Ama bu onu açacaktır.
Açık çağrıyı görüyorsunuz ve while döngüsünü fark ettiniz.
Bu çok önemli.
Geri dönelim ve nasıl dizeleri bir dosyadan okuyabiliriz ki bu
çok daha verimlidir.
Yani bu tek bir karakteri okumak.
Bir dizeyi okumaya ne dersiniz?
fgets işlevini kullanabilirsiniz herhangi bir dosya veya akıştan okumak için.
Bu bir dize okuyacaktır.
Bir karakter dizesi alır ilk parametreye sahiptir.
İstediğiniz karakter sayısı okuma ve ardından gerçek dosya işaretçisi.
Yani bu fonksiyon str tarafından işaret edilen bellek
alanındaki bir dizeyi okur.
Yani aslında verinin depolanacağı
tampon belleğe geçer.
Ve bu bir işaretçi, yani bunun için bellek ayırmanız gerekir.
Ve sonra da dosya işaretçisi olan üçüncü parametre
olarak belirtilen dosya.
Ve sonra nchar gidiyor ne kadar veri okunacağını söylemek için.
Yani nchars'ı 10 gibi koyarsanız, önce bir satır beslemesine çarpmadığı
sürece 10 karakter okuyacaktır.
Bu yüzden ya bir tüm satırı ya da okuduğunuz karakter sayısını
okuyacaktır. ikinci parametrede belirtin.
Satır sonu şu şekilde belirtilir ters eğik çizgi n hangisi önce gelirse.
Bir satırsonu karakteri kırmızı ise, dize içinde
tutulur ve null sonlandırıcı dizenin sonuna eklenir.
Yani eğer gerçekten daha fazla karakter varsa, satır beslemesine
kadar okuyacak ve sonra atlar ve sonra bu yeni satır
karakterini alır ve bir sonunda null karakteri.
Hata yoksa, fgets ilk parametre olan işaretçiyi
döndürecektir.
Bir işaretçi döndürecektir. fonksiyondan döndürülür.
Ve sonra da gidiyor str işaretçisini ilk parametre
olarak doldurmak için.
Bir hata varsa null döndürülür.
Ve sonra dosyanın sonunu okumak null döndürülmesine neden olur, bu da tüm dizelerinizi
okuduğunuz anlamına gelir.
Şimdi bir örneğe bakalım.
Burada bizim ana ve bir karakter dizesi oluşturarak dosya işaretçimizi
oluşturuyoruz.
İşte bu bizim yapmadığımız bir işaretçi Bunun için herhangi bir veri mallocate etmiyoruz, sadece bir
karakter dizisi oluşturuyoruz.
Dosyayı okumak için açıyoruz, Sadece R olduğu için okuyorum.
Boşsa atlayın dedik.
Aksi takdirde, sadece fgets deriz, 60 karakterde okuyoruz.
Veya satır beslemesi bir satır beslemesi gelecek
ve sonra yazdıracak ve str tamponunda ne varsa.
Yani str ilk karakteri aktarılır.
Ve sonra dosya işaretçisini kapatırız, null olarak ayarlayın ve sıfır döndürün.
Öyleyse, tekrar, bir göz atalım bunu kod bloklarımızın içinde IDE.
Bu olayda değişen tek şey program aslında 14 ila 17. satırlardır.
Dizemizi okumak için fgets kullanıyoruz ve sonra bir str tamponumuz var.
Bu yüzden ayrıca bir Buradaki karakter
dizisi bizim str'mizdir ve bunun 60 içermesini istiyoruz.
60'ta okuyoruz.
Bir satır beslemesi ekleyeceğiz, böylece 59'da okuyacak ve ardından sonuna bir satır beslemesi
ekleyecektir.
Yani 61 diyebiliriz.
Ve sonra fgets içinde olacak bir if deyimi ve her bir dizgiyi, aşağıdakilerden
biri gerçekleşene kadar okuyacak 60 karaktere veya yeni bir satıra ulaştığında bu dizeyi yazdıracaktır.
Bunun olmadığını fark edeceksiniz. bir while döngüsü, bu yüzden
dosyanın sonuna kadar okumuyoruz.
Kitabın sonunu okuduk dosyasında bir null alırız.
Yani eğer bunu inşa edersek alıntılarımızı doğru yaptığımızdan emin olmalıyız.
Powerpoint'ten her kopyaladığınızda tırnak işaretlerini karıştırıyor.
Ve biz emin olmak istiyoruz oluşturduğumuz c değişkeni kullanılmıyor,
sorun değil.
O zaman devam edelim ve bunu çalıştıralım.
Ve görüyorsun, bu Jason.
Yani aslında bütün bir dosyadan metin satırı.
İlk satırda şöyle yazıyordu.
Yani tekrar arayacaksın ve ikinci satırı okuyun.
Bayt sayısını değiştirirseniz okumak, diyelim ki sadece
10 okumak istiyoruz, 10'da okuyacak ve sonra tüm satırı okumak
yerine bu 10 taneyi döndürür.
Bu yüzden burada sadece merhaba var.
Bu yüzden numarada okunacak ikinci parametrenizin
karakter sayısı kadar veya bir satır alana kadar besler ve bunu str'de depolar.
Str bir karakter dizisidir.
Fgets çıktısını alırız.
Fgets çok daha fazlası Okumak için verimli.
Çünkü okumuyoruz. bir karakter ve bir seferde,
daha fazla veri okuyoruz.
Bir karakteri okumak zaman o kadar verimli değildir.
Artık tekli okumanın nasıl yapıldığını biliyoruz. karakterlerini okuyana
kadar dizeleri nasıl okuyacağımızı biliyoruz. satır veya bir dizi karakter.
Ama ayrıca şurada da okuyabilirsiniz bir dosyadan biçimlendirilmiş girdi.
Yani getc, fgetc, fgets var.
Ve şimdi başka bir fscanf adlı işlev.
Bu biçimlendirilmiş girdidir.
Biçimlendirilmiş girdi belirtilen veridir gibi bir sınırlayıcıya veya kendisiyle ilişkili
belirli bir biçime sahiptir.
Bu fscanf işlevi bir dosya alır akışından ve ardından bir biçimden.
Biçim tıpkı printf gibi kullandığınız biçim belirticileri.
Yani tam sayıları okumak istiyorsanız veya çiftler halinde, dosya içinde
tanıtılan verileri belirtebilirsiniz ve
bunu tıpkı scanf gibi görene kadar okuyacaktır. bir boşluk karakteri görene kadar.
Yani fscanf'in ilk argümanı işlevi, akışı tanımlayan bir dosya nesnesine
bir işaretçidir.
Ne olduğunu bilmek zorundayız. okuduğumuz dosya.
İkinci argüman işlevi formattır.
Bu, aşağıdakileri içeren bir c dizesidir aşağıdaki öğelerden bir veya daha fazlası.
Beyaz boşluk karakteri, beyaz boşluk olmayan karakteri, biçim belirticileri.
Kullanım aşağıdaki ile aynıdır scanf ve printf içinde, ancak bunun
yerine bir dosyadan.
Yani çift tırnak içinde şunları yapabilirsiniz metin koyarken, boşluk veya boşluk olmayan
karakterler koyabilirsiniz, ancak biçim belirleyicileri aslında
verileri nasıl okuyacağınızdır.
Ve sonra değişkenleri belirlersiniz içine okumak istediğiniz.
Yani fonksiyon şunları döndürür başarıyla eşleştirilen
ve atanan girdi öğelerinin sayısı.
İşte böyle görünüyor.
Ana bölümün şu olduğunu fark edeceksiniz str1, str2 ve str3 olmak üzere her biri sadece on
bayt olan üç karakter dizisi oluşturun.
Adında bir tamsayı oluşturuyoruz yıl, bir dosya işaretçisine ulaştık.
Yaptığımız ilk şey dosyayı açıyoruz.
Bu durumda, açıyoruz okumak ve yazmak için.
Ama aslında yazmayacağız bir şey yapmayacağız, sadece ondan okuduğumuz
şeyi görüntüleyeceğiz.
Dosyanın şu şekilde olduğundan emin olmak için kontrol ederiz işaretçisi null değerine eşit değildir.
Ve sonra burada, biz aslında fputs dosyasına bir şey koymak.
Bu konuyu henüz konuşmadık, ama bu bir şeyler yazıyor.
Burada fscanf'e odaklanın.
fscanf şu şekilde olacak biçimlendirilmiş verileri okuyun.
Ve bu yüzden ne yapacak boşluklarla ayrılmış
üç dizeyi okuyacak olmasıdır.
Ve böylece yüzdeyi görüyorsunuz boşluk yüzde olarak boşluk yüzde
olarak s boşluk yüzde d.
O zaman nerede olduğumuzu söylüyoruz onları üç karakter
dizimize okuyacağız ve sonra ve yılımız için adres operatörünü
belirtmemiz gerekir.
Ancak veriler şu şekilde biçimlendirilir Yazıldığında belirli bir şekilde.
Ve bir şey okuduğunuzda biçimlendirilmişse, dosyanın biçimini nasıl
yazıldığını anlamanız gerekir.
Burada dosyanın yazıldığını biliyoruz dizeleri boşluklarla ayırarak.
İşte bu şekilde okuyacağım.
Ve böylece okuyabiliriz bir çağrı fscanf ile.
Formumuzu belirleyici olarak kullanabiliriz ikinci argümanımız olarak ve daha
sonra her bir argüman için değişken sayıda içine okumak istediğimiz veriyi belirtmek için
her virgülden ayrı olarak.
Ve sonra bunu yazdırıyoruz verilerini, yıldaki üç dizgiyi ve ardından
dosyayı tekrar kapatıyoruz.
Ve işte bu üç yol bir dosyadan veri okuyabilirsiniz.
Karakterlerle de okuyabilirsiniz, dizeleri okuyabilir veya biçimlendirilmiş
verileri okuyabilirsiniz.
Ve biçimlendirilmiş yolu fark edeceksiniz Bunu yapmanın yolu scanf'e çok benzer.
Biçim belirticileri kullanırsınız, okunacak değişkenler.
Bir yarışmamız olacak Bu konuda daha fazla bilgi sahibi olmanızı sağlayacak
verileri okuyun.
Oldukça basit.
Açık görüşünü yapacaksın. çağrılarında, dosya işaretçilerinizi
kullanacak ve bu üç işlevi kullanmak için.
Teşekkür ederim.