none
.txt veya properties dosyalarında veri değiştirme RRS feed

  • Soru

  • Elimde properties uzantılı dosyalar var txt şeklinde açılabiliyor.İçeriğinde key ve value değerleri var mesela şu şekilde örnek vereyim;

    ürün=masa,

    fiyatı=60,

    Benim yapmak istediğim kod tarafında value değerini değiştirmek yani şu şekilde

    ürün=sandalye

    fiyatı=50

    Properties dosyası java tarafından yapılan bir dosya ben .net ile müdahale etmek istiyorum. Nasıl bir yol izlemeliyim.

    Teşekkürler


    alican

    13 Ekim 2016 Perşembe 08:52

Yanıtlar

  • Bildigim kadariyla java properties dosyalari o sekilde degil (sonunda virgul yok). Eger standard properties dosyalarindan bahsediyorsan (her property yalniz bir kere ve sonda virgul yok), soyle yapabilirsin:

    void Main()
    {
    	var propertyFile = @"c:\Dizin\dosya.properties";
            var encoding = Encoding.UTF8;
    
    	var degistir = "ürün=sandalye,fiyatı=50"
    		.Split(',')
    		.Select(x => x.Split('='))
    		.ToDictionary(x => x[0], x => x[1]);
    
        var properties = ReadProperties(propertyFile, encoding);
    	foreach (var kvp in degistir)
    	{
    		if(properties.ContainsKey(kvp.Key)) properties[kvp.Key] = kvp.Value;
    		else properties.Add(kvp.Key, kvp.Value);
    	}
    
    	var newProperties = properties.Select(p => $"{p.Key}={p.Value}");
    	File.WriteAllLines(propertyFile, newProperties, encoding);
    }
    
    public static Dictionary<string, string> ReadProperties(string fileName, Encoding encoding=null)
    {
    	return
    		File.ReadAllLines(fileName, encoding==null?Encoding.Default:encoding)
    		.Select(l => l.Split('='))
    		.ToDictionary(l => l[0], l => l[1]);
    }
    
    Not: Encoding ozellikle var cunku isin icinde Turkce karakterler var, o zaman dosyanin hangi encoding ile saklandigini bilmelisin. Bir de son satirda dosyanin uzerine degisiklikleri yazabilecegin var sayiliyor.

    13 Ekim 2016 Perşembe 11:48

Tüm Yanıtlar

  • Bildigim kadariyla java properties dosyalari o sekilde degil (sonunda virgul yok). Eger standard properties dosyalarindan bahsediyorsan (her property yalniz bir kere ve sonda virgul yok), soyle yapabilirsin:

    void Main()
    {
    	var propertyFile = @"c:\Dizin\dosya.properties";
            var encoding = Encoding.UTF8;
    
    	var degistir = "ürün=sandalye,fiyatı=50"
    		.Split(',')
    		.Select(x => x.Split('='))
    		.ToDictionary(x => x[0], x => x[1]);
    
        var properties = ReadProperties(propertyFile, encoding);
    	foreach (var kvp in degistir)
    	{
    		if(properties.ContainsKey(kvp.Key)) properties[kvp.Key] = kvp.Value;
    		else properties.Add(kvp.Key, kvp.Value);
    	}
    
    	var newProperties = properties.Select(p => $"{p.Key}={p.Value}");
    	File.WriteAllLines(propertyFile, newProperties, encoding);
    }
    
    public static Dictionary<string, string> ReadProperties(string fileName, Encoding encoding=null)
    {
    	return
    		File.ReadAllLines(fileName, encoding==null?Encoding.Default:encoding)
    		.Select(l => l.Split('='))
    		.ToDictionary(l => l[0], l => l[1]);
    }
    
    Not: Encoding ozellikle var cunku isin icinde Turkce karakterler var, o zaman dosyanin hangi encoding ile saklandigini bilmelisin. Bir de son satirda dosyanin uzerine degisiklikleri yazabilecegin var sayiliyor.

    13 Ekim 2016 Perşembe 11:48
  • Teşekkür ederim cevabınız için.Peki java ile yapılan properties dosyasını nasıl değiştiririm yani virgül olmadan nasıl olabilir.

    Aslında yapmak istediğim işin java kodunu buldum ama nasıl projeye dahil edebilirim bir türlü başaramadım.

    Java kodu şu şekilde

    1. public class OrnekPropertiesKullanimi
    2. {
    3.     public static void main( String[] args )
    4.     {
    5.      Properties prop = new Properties();
    6.  
    7.      prop.setProperty("database""localhost");
    8.      prop.setProperty("dbuser""kullaniciAdi");
    9.      prop.setProperty("dbpassword""sifre");
    10.  
    11.      prop.store(new FileOutputStream("config.properties")null);
    12.  
    13.      
    14.     }
    15. }


    alican

    14 Ekim 2016 Cuma 12:32
  • Variable=deger

    biçiminde olmak zorunda mı? Properties uzantılı olmak zorunda mı?  Siz Asp.Net kısmında açmışsınız konuyu ve derdinizde benim anladığım bir connection string bilgisini okumak. Bunun için ConfigurationManager var zaten asp.net'te onu kullanın.


    http://pgnchess.com
    http://dergikapaklari.com

    14 Ekim 2016 Cuma 15:58
  • Teşekkür ederim cevabınız için.Peki java ile yapılan properties dosyasını nasıl değiştiririm yani virgül olmadan nasıl olabilir.

    Aslında yapmak istediğim işin java kodunu buldum ama nasıl projeye dahil edebilirim bir türlü başaramadım.

    Java kodu şu şekilde

    1. public class OrnekPropertiesKullanimi
    2. {
    3.     public static void main( String[] args )
    4.     {
    5.      Properties prop = new Properties();
    6.  
    7.      prop.setProperty("database""localhost");
    8.      prop.setProperty("dbuser""kullaniciAdi");
    9.      prop.setProperty("dbpassword""sifre");
    10.  
    11.      prop.store(new FileOutputStream("config.properties")null);
    12.  
    13.      
    14.     }
    15. }


    alican

    Bunu dahil etmenin ne geregi var ki? Yukarida kodla ornekledim zaten, bu basit bir property bag, yalnizca Java degil cok dilde boyle yaziliyor zaten. Basitce bir tane Dictionary'i config.properties diye bir text dosyasina yaziyorsun (yukaridaki kodda var). Eger kodu anlamadiysan ona bakalim.
    14 Ekim 2016 Cuma 16:09
  • Hayır benim sorum connection string değil ...Açık kaynak java uygulamasasının ayarlarını değiştirmekti.Ayarlar properties uzantılı dosyada tutuluyor.

    alican

    14 Ekim 2016 Cuma 17:31
  • Teşekkürler .Kodu anladım ve uyguladım başarılı oldu tek şu kod satırında $ ne işe yarıyor ..Bende uyarı veriyor yanlış kullanım diye.

    $"{p.Key}={p.Value}");

    alican

    14 Ekim 2016 Cuma 17:33
  • O C# 6.0'da gelen string interpolation. O sekilde yazmak zorunda degilsin:

    string.Format("{0}={1}", p.Key, p.Value)

    14 Ekim 2016 Cuma 21:55