C++ Fstream Yardım!

Başlatan supercoderboy, 02 Aralık 2016 - 21:58:43

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

supercoderboy

Merhaba Ben belirli bir satırı silmek istiyorum bunu nasıl yapabilirim ? Şimdiden Çok Sağolun :)

ShangriLa

Ne şekilde belirli, satır sayısına göre mi, satır içerisinde gecen bir kelimeye göre mi
Ubuntu Mate Trusty

supercoderboy

Mesela 1.satirdaki herseyi silecek

Amenofis

Dosyadan silme yok, sadece okuma ve yazma var.

supercoderboy

Kötü oldu :(
o zaman şöyle bir şey düşündüm dosyada ki verileri vektör'de saklayıp istediğimiz veriyi çıkartıp tekrar dosyaya yazdırıcaz olabilir mi acaba

Erdem

Alıntı yapılan: supercoderboy - 02 Aralık 2016 - 23:02:59
Mesela 1.satirdaki herseyi silecek

Şu şekilde yapılabilir:


#include <iostream>
#include <fstream>
#include <unistd.h>

int main()
{
  std::fstream kutuk;
  kutuk.open("deneme.txt", std::fstream::in | std::fstream::out);

  // İlkönce kütüğün boyutunu öğrenelim
  kutuk.seekg(0, kutuk.end);
  std::streampos kutukSonu = kutuk.tellg();
  kutuk.seekg(0, kutuk.beg);

  // İlk satırın boyutunu öğren
  std::string ilkSatir;
  std::getline(kutuk, ilkSatir);


  // İki tane streampos'a ihtiyacımız var biri okuyan diğeri yazan
  std::streampos okumaYeri = ilkSatir.size() + 1;
  std::streampos yazmaYeri = 0;

  // okumaYerinden başlayarak tüm kütüğü parçalar halinde oku Read the whole kutuk starting at okumaYeri by chunks of size bufferSize

  std::size_t okunanParca = 256;
  char bellek[okunanParca];
  bool bittiMi = false;
  while(!bittiMi)
  {
    kutuk.seekg(okumaYeri);
    if(okumaYeri + static_cast<std::streampos>(okunanParca) >= kutukSonu)
    {
      okunanParca = kutukSonu - okumaYeri;
      bittiMi = true;
    }
    kutuk.read(bellek, okunanParca);
    kutuk.seekg(yazmaYeri);
    kutuk.write(bellek, okunanParca);
    okumaYeri += okunanParca;
    yazmaYeri += okunanParca;
  }
  kutuk.close();

  // unistd.h başlığından truncate işlevini kullanıyoruz
  truncate("deneme.txt", yazmaYeri);
  std::cout << "İlk satırı siliyorum" << '\n';
  return 0;
}


Tabi D ile tüm bu kütük okuma yazma işlemleri daha kolay oluyor.  ;)

Örneğin kütüğe ubyte olarak 8'er bit yazma.

 
import std.stdio;

void main()
{
    auto dosya = File("deneme.bin", "wb");

    ubyte[] veri = [ 0xaa, 0x0a, 0x55 ];
    dosya.rawWrite(veri);
}


Dosyadan satır satır okuma:

import std.stdio;
import std.string;
import std.file;

void main()
{
    string veriler;
    auto kütük = File("deneme.txt", "r");
    while (!kütük.eof())
    {
        veriler ~= kütük.readln();
    }
    writeln(veriler);
}
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

supercoderboy

Çok Teşekkür ederim yardımın için