Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

String manipulation

Îåêßíçóå áðü ôï ìÝëïò kallileo. Τελευταία δημοσίευση από το μέλος Vangos στις 11-11-2008, 22:30. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-11-2008, 08:28 45994

    String manipulation

    Εχοντας τον παρακατω κωδικα διαβαζω απο ενα αρχειο.

     try
      {
      using (StreamReader sr = new StreamReader(label1.Text))
      {
      string line;

      while ((line = sr.ReadLine()) != null)
      {

      MessageBox.Show(line.ToString());

      }
      }
      }
     

    Οι εγγραφές είναι της παρακάτω μορφής:

    MELAMINH OXYA;8,00;;699,00;276,00;2,00;Back
    MELAMINH OXYA;8,00;;699,00;276,00;1,00;Back

    Αυτο που με αποσχολεί είναι το πώς θα πρέπει να προχωρήσω μετά ώστε να κάνω κάποιες αλλαγές στο string που θα ήταν ας πούμε αφαίρεση του delimiter και των μηδενικών, πρόσθεση whitespace και λοιπά...

    Θα πρέπει να το διασπάσω σε κομμάτια όπως θα έκανα στη C .....π.χ fscanf(fr,"%[^;];%d;%d;%d;%d;%s",&material,&depth,&l,&w,&q,&code); ή καλύτερα να επεξεργαστώ όπως είναι το string line?

    Θέλω να βγάλω περίπου κάτι τέτοιο...

    __MELAMINH OXYA080 2225 6990 2760 10Back

     



  •  05-11-2008, 09:38 45995 σε απάντηση της 45994

    Απ: String manipulation

    Μπορείς να χρησιμοποιήσεις τις μεθόδους της String για να κάνεις αυτό που θες, όπως π.χ. την String.Replace ή τις String.Split, String.Join
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-11-2008, 19:44 46103 σε απάντηση της 45995

    Απ: String manipulation

    Τι λαθος κανω εδω?

    private void button3_Click(object sender, EventArgs e)
      {
      try
      {
      using (StreamReader sr = new StreamReader(label1.Text))
      {
      FileStream file = new FileStream("c:\\analyzer\\OUT\\test.txt", FileMode.OpenOrCreate, FileAccess.Write);
      StreamWriter sw = new StreamWriter(file);
      string line;

      while ((line = sr.ReadLine()) != null)
      {
      string[] temp = line.Split(new char[] { ';', });
      temp[1] = temp[1].Replace(",", "");
      temp[2] = temp[2].Replace(",", "");
      temp[3] = temp[3].Replace(",", "");
      if (temp[1].Length < 3)
      temp[1] = "0" + temp[1];
      string final = temp[0] + temp[1] + " " + temp[2] + " " + temp[3] + " " + temp[4] + temp[5];
      //MessageBox.Show(final);
      sw.Write(final");

      }

      sw.Close();
      file.Close();
      }
      }

    To αρχειο που δημιουργειται ειναι αδειο...

    Το object streamreader πως πρεπει να μπει σωστα στην using.

  •  07-11-2008, 23:11 46109 σε απάντηση της 46103

    Απ: String manipulation

    Άσχετα από τα using και StreamReader, τί προσπαθείς να κάνεις? Φαίνεται σαν να προσπαθείς να αφαιρέσεις κόματα και newline από το περιεχόμενο του label1.Text. Αυτό μπορείς να το κάνεις πολύ απλά με label1.Text.Replace(;','').Replace(',','').Replace("\n","")

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  08-11-2008, 00:09 46110 σε απάντηση της 46103

    Απ: String manipulation

    Πέρα από αυτό που λέει ο Παναγιώτης, έχεις ένα " στο sw.Write(final") το οποίο θα χτυπάει στη μεταγλώττιση, αλλά μάλλον δεν είναι αυτό το πρόβλημα. Πες καλύτερα τι θέλεις να γίνεται ;)
    Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...
  •  08-11-2008, 01:58 46111 σε απάντηση της 46110

    Απ: String manipulation

    Εκανα κατι δοκιμες κολλουσα κωδικα απο δω, εγγραφα απο διπλα....μπαχαλο εγινε. Σιγουρα το προβλημα δεν ειναι το sw.Write(final"). Στο object StreamReader περναω την διαδρομη για το αρχειο εισοδου(πιο πανω στο προγραμμα εχω label1.Text = openFileDialog1.FileName;). Εκει δεν εχει σιγουρα προβλημα. Διαβαζω καποιες γραμμές εκει και μετα τις κανω τροποποιηση με Split, Replace και λοιπα. Μεχρι εδω ολα καλα...

    Το προβλημα παρουσιαζονταν οταν πηγαινα να γραψω το τελικο modified string σε νεο αρχειο. Τελικα ομως ο παρακατω κωδικας φαινεται λειτουργει σωστα. Επισης μπορω να κανω την temp[0] να εχει μεγιστο 18 χαρακτηρες και οταν τυπωνεται στο αρχειο να εχει δεξια στοιχιση χωρις πολλα πολλα? Στην C π.χ θα μπορουσα να γραψω printf("%18.18s");.

    Καμια συμβουλη για βελτιωση του κωδικα?

    private void button3_Click(object sender, EventArgs e)
      {
      try
      {
      using (StreamReader sr = new StreamReader(label1.Text))
      {
      FileStream file = new FileStream("c:\\anal\\OUT\\test.txt", FileMode.OpenOrCreate, FileAccess.Write);
      StreamWriter sw = new StreamWriter(file);
      string line;

      while ((line = sr.ReadLine()) != null)
      {
      string[] temp = line.Split(new char[] { ';', });
      temp[1] = temp[1].Replace(",", "");
      temp[2] = temp[2].Replace(",", "");
      temp[3] = temp[3].Replace(",", "");
      if (temp[1].Length < 3)
      temp[1] = "0" + temp[1];
      string final = temp[0] + temp[1] + " " + temp[2] + " " + temp[3] + " " + temp[4] + temp[5];
      //MessageBox.Show(final);
      sw.WriteLine(final);

      }

      sw.Close();
      file.Close();
      }
      }
      catch (Exception ex)
      {
      MessageBox.Show(ex.ToString());
      }
      finally
      {
       
      }
      }


  •  08-11-2008, 18:21 46118 σε απάντηση της 46111

    Απ: String manipulation

    Η χρήση του using ουσιαστικά πραγματοποιεί και το κλείσιμο του αρχείου και ελέγχει, αν δεν κάνω λάθος, για τυχόν exceptions. Οπότε, το try που έχεις από πάνω μπορεί να πάει μέσα (χωρίς να σημαίνει ότι κάνεις κάτι λάθος). Επίσης, μπορείς να χρησιμοποιήσεις using και για την StreamWriter και για την FileStream ή ένα try για όλα μαζί.

    Προσωπικά, συνηθίζω να κάνω τη δήλωση των streams εκτός του try και την αρχικοποίησή τους μέσα σε αυτό.

    Σχετικά με το μέγιστο μήκος 18 χαρακτήρων που ρωτάς, μπορείς να χρησιμοποιήσεις την StringBuilder κάπως έτσι:

    StringBuilder sb = new StringBuilder(aString, 18);
    ή
    StringBuilder sb = new SringBuilder();
    sb.Capacity = 18;

    και στη συνέχεια, προκειμένου να αναθέσεις την τιμή της σε κάποιο άλλο string, γράφεις string anotherString = sb.ToString();

    Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...
  •  10-11-2008, 11:23 46125 σε απάντηση της 46118

    Απ: String manipulation

    Εχεις δικιο για την αρχικοποιηση...

    Το μεγιστο μηκος το εφτιαξα με string.Remove(18) και μετα string.PadLeft().

    Για να χρησιμοποιησω using και για τα αλλα δυο πρεπει να τα βάλω nested μεσα στο πρωτο using?

    Δηλαδη...

    using (sr = new StreamReader(label1.Text))

    {

    using (file = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write);)

    {

    using (sw = new StreamWriter(file);)

    {

    .

    .

    .

    }

    }

     

    }

  •  11-11-2008, 22:30 46154 σε απάντηση της 46125

    Απ: String manipulation

    Ή έτσι ή διαδοχικά. Ό,τι σε βολεύει ανάλογα με αυτό που κάνεις.

    Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems