Jump to content
Sign in to follow this  
encik pot pet

Aktiviti Pengaturcaraan #2

Recommended Posts

kali ni kita taknak restrict kat C/C++ shj.. semua boleh...yg paling penting kreatif dan berseni smile.gif

aktiviti kedua ni kita akan buat satu program yg boleh baca/tulis .ini file (file utk simpan setting). dalam file 'setting.ini' kita ada tiga nilai iaitu value1, value2, value3. file tersebut adalah berjenis teks dan kelihatan seperti contoh dibawah

value1 = 2
value2 = 3
value3 = 3
arahan soalan (jangan lari tajuk plak) 1. jika file setting.ini tak wujud, korang kena create file tersebut with initial value 0(null) bagi ketiga2 nilai 2. korang kena display nilai dalam file setting tu kat skrin 3. kalau setting.ini tak cukup nilai seperti
value1 = 2
value3 = 3
korang kena tambah nilai2 ke dalam file tersebut menjadi
value1 = 2
value3 = 3
value2 = 3
4. akhir sekali.. kalau file .ini anda kelihatan
value1 = 2
value2 = 3
value3 = 3
atau
value2 = 3
value1 = 2
value3 = 3
atau
value3 = 3
value2 = 3
value1 = 2
dan seterusnya.. display kat skrin mesti ikut turutan iaitu
value1 = 2
value2 = 3
value3 = 3

sekian, wassalam..

p/s:

kalau malas nak buat pun takpe.. bukan dapat gaji pun

apa2 hal..design program ni elok2 sebab lepas ni aku nak mintak korang expand program tersebut

Edited by zeph

Share this post


Link to post
Share on other sites

Assalamualaikum

Apsal takde orang post ni? Meh sini aku start dulu.

Ok program aku ni tak siap lagi, tapi aku post juga atas permintaan peminat (acah je). Sila beri tunjuk ajar

#include <stdio.h>

int
main(int argc, char **argv)
{
  FILE *pFile;
  int i;
  long fSize;
  char *fBuffer;

  char value[33] = "value1 = 2\nvalue2 = 3\nvalue3 = 3";

  //char *value = "value1 = 2\nvalue2 = 3\nvalue3 = 3";

  pFile = fopen("setting.ini", "r");
  if (pFile == NULL)
  {
    pFile = fopen("setting.ini", "w");
    fwrite(value, sizeof(value[0]), sizeof(value)/sizeof(value[33]), pFile);
  }

  // Obtain file size
  fseek(pFile, 0, SEEK_END);
  fSize = ftell(pFile);
  rewind(pFile);

  // Allocate memory to contain the whole file.
  fBuffer = (char*) malloc(fSize);
  if (fBuffer == NULL) exit (2);

  // Copy the file into the buffer.
  fread (fBuffer, 1, fSize, pFile);

  printf("%s", fBuffer);

  // Close & Free
  fclose (pFile);
  free (fBuffer);

  return 0;
}

Edited by mchammer

Share this post


Link to post
Share on other sites

apsal C# duk sama ngan C ngan C++? Lain spesis tuh. Bawak mudarat karang.

nampak gaya kena restructure lagi la forum ni....

tambahan:

btw utk soalan ni..aku lebih mementing implementation dari language(syntax, structure, etc).. so terpulang nak guna apa2 pun

Edited by zeph

Share this post


Link to post
Share on other sites

kalau tanak restructure pun.. leh lah org paste dlm php nyer kt sini ke..

lama dah terfikir dah ni..

lalala~ :-"

Share this post


Link to post
Share on other sites

ni ha.. C# version..

// MyVWA.Fait Accompli (fa)

#region Using directives

using System;
using System.IO;

#endregion

namespace AktivitiPutera2
{
    class Program
    {
        // N ni setting untuk brape banyak key yang diperlukan
        static int N = 3;
        static void Main(string[] args)
        {
            // assign initial value (in case tak wujud data)
            string[][] data = new string[N][];
            for (int i = 0; i < N; i++)
            {
                data[i] = new string[2];
                data[i][1] = "0";
            }

            // default key
            // kalo N da diubah, maka ni pun kene ubah
            // data[0][] ke data[N-1][]
            data[0][0] = "value1"; data[1][0] = "value2"; data[2][0] = "value3";
            
            // sekiranye fail tak wujud..
            if (!File.Exists("setting.ini"))
            {
                Console.WriteLine("Fail setting.ini tak wujud.\nFail dengan default "+
                    "setting akan dibina");

                // handle Exception..mane le tau tak le nak create file
                try
                {
                    // tulis setting bagi ketiga² value
                    using (StreamWriter sw = new StreamWriter("setting.ini"))
                        for (int i = 0; i < data.Length; i++)
                            sw.WriteLine(data[i][0] + " = " + data[i][1]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                return; // pulang
            }

            string baris;

            // semakKey == true kalo key tu da assign kat dalam fail
            bool[] semakKey = new bool[N];
            for (int i = 0; i < N; i++)
                semakKey[i] = false;

            // handle exception
            try
            {
                StreamReader sr = new StreamReader("setting.ini");
                while ((baris = sr.ReadLine()) != null)
                {

                    // elakkan kalo baris.Length < 6
                    // mane le tau kalo ade blank line
                    try
                    {
                        if (baris.Substring(0, 6) == "value1")
                        {
                            data[0][1] = baris.Substring(9, 1);
                            semakKey[0] = true;
                        }
                        else if (baris.Substring(0, 6) == "value2")
                        {
                            data[1][1] = baris.Substring(9, 1);
                            semakKey[1] = true;
                        }
                        else if (baris.Substring(0, 6) == "value3")
                        {
                            data[2][1] = baris.Substring(9, 1);
                            semakKey[2] = true;
                        }
                    }
                    catch { }
                }
                sr.Close();
            }
            // kemungkinan fail tak le read, permission takde or dll la..
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Environment.Exit(0x01);
            }

            // semak adakah setiap key tu da ade..kalo tak, buat key baru...
            for (int i = 0; i < N; i++)
            {
                if (!semakKey[i])
                {
                    Random rnd = new Random((int) System.DateTime.Now.Ticks);
                    data[i][1] = Convert.ToString(rnd.Next(1, 3));
                    Console.WriteLine("Key " + data[i][0] + " tiada dalam pasaran.\n" +
                        "Nilai baru untuk key tersebut adalah " + data[i][1]);
                }
            }

            // display semua key dan value ke skrin!
            Console.WriteLine("Memparkan key = value ke skrin la!");
            for (int  i = 0;  i < N;  i++)
                Console.WriteLine(data[i][0] + " = " + data[i][1]);
        }
    }
} // eof

ni ha plak outpunye:

user posted image

user posted image

Thanks to ImageShack for tongue.gifFree Image Hosting

Share this post


Link to post
Share on other sites

            // semak adakah setiap key tu da ade..kalo tak, buat key baru...
           for (int i = 0; i < N; i++)
           {
               if (!semakKey[i])
               {
                   Random rnd = new Random((int) System.DateTime.Now.Ticks);
                   data[i][1] = Convert.ToString(rnd.Next(1, 3));
                   Console.WriteLine("Key " + data[i][0] + " tiada dalam pasaran.\n" +
                       "Nilai baru untuk key tersebut adalah " + data[i][1]);
               }
           }

good one! tapi masih incomplete... sebab file setting.ini tidak diubah

btw... this is my expectation from a cs student

Share this post


Link to post
Share on other sites

ops..sori...tak prasan kene ubah skali fail setting.ini..code ni da ubah untuk ganti code dr line 97-107 sahaje.. laugh.gif

            // semak adakah setiap key tu da ade..kalo tak, buat key baru...
            for (int i = 0; i < N; i++)
            {
                if (!semakKey[i])
                {
                    // lebih selamat kalo letak stream reader hanya sekiranya
                    // missing key berlaku...bukak bile perlu je..
                    // kalo sume key ade, x payah la bukak fail. 
                    try // macam biase le, handle exception
                    {
                        StreamWriter sw = new StreamWriter("setting.ini",true);
                        Random rnd = new Random((int)System.DateTime.Now.Ticks);
                        data[i][1] = Convert.ToString(rnd.Next(1, 3));
                        Console.WriteLine("Key " + data[i][0] + " tiada dalam " +
                            "pasaran.\nNilai baru untuk key tersebut adalah " +
                            data[i][1]);
                        sw.WriteLine(data[i][0] + " = " + data[i][1]);
                        sw.Flush();     // jgn lupe flush lepas guna
                        sw.Close();     // jgn lupe tutup lepas bukak
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Ops. Tak leh nak tulis kat fail. Sebabnye:");
                        Console.WriteLine(e.Message);
                    }
                }

good one! tapi masih incomplete... sebab file setting.ini tidak diubah

btw... this is my expectation from a cs student

jgn la puji..malu ah ding dong... tongue.gif

Share this post


Link to post
Share on other sites

mcm best pulak.. ni saya punya C#.. sila beri tunjuk ajar..

using System;
using System.Collections;
using System.IO;
using System.Text;

namespace PuteraKuiz2
{
    class Class1
    {
        static Hashtable hash;
        static ArrayList hashKeys;

        [STAThread]
        static void Main(string[] args)
        {
            string content;

            //read file
            try
            {
                StreamReader sr = new StreamReader("settings.ini");
                content = sr.ReadToEnd();                
                sr.Close();
            }
            catch (System.IO.FileNotFoundException)
            {
                Console.WriteLine("Unable to read file. Using default values.");
                content = "value1 = 0\nvalue2 = 0\nvalue3 = 0";                
            }

            //split to lines
            string[] lines = content.Trim().Split('\n');

            //extract data and put in a hashtable
            hash = new Hashtable();
            for (int i=0; i<lines.Length; i++)
            {
                string[] col = lines[i].Split('=');
                hash.Add(col[0].Trim(), col[1].Trim());                
            }

            hashKeys = new ArrayList(hash.Keys);

            //check missing keys
            const string DEFAULT_VALUE = "3";
            foreach (string defaultKey in new string[] {"value1", "value2", "value3"})
                if (!hashKeys.Contains(defaultKey))
                {
                    hashKeys.Add(defaultKey);
                    hash.Add(defaultKey, DEFAULT_VALUE);
                }

            //sort the keys
            hashKeys.Sort();

            Write();

            //change values or whatever
            hash["value2"] = "1957";
            hash["value3"] = "2891";
            
            Write();

            try
            {
                StreamWriter sw = new StreamWriter("settings.ini");
                foreach (string key in hashKeys)
                    sw.WriteLine("{0} = {1}", key, hash[key]);
                sw.Close();
            }
            catch
            {
                Console.WriteLine("Unable to write file.");
            }
                            
            Console.ReadLine();
        }

        public static void Write()
        {
            Console.WriteLine("\nEchoing content...");
            foreach (string key in hashKeys)
            {
                Console.WriteLine("{0} = {1}", key, hash[key]);
            }
        }
    }
}

Share this post


Link to post
Share on other sites

@1kHz

best la coding ko..tak terpikir pon nak pakai hashtable..pastu lg kemas dr akunye laugh.gif

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...