Obsługa plików regularnych i wyświetlanie danych

Odpowiedz Nowy wątek
2006-08-22 10:36
0

Witam,
Mam taki kod:
public partial class Form1 : Form
{
public string text;
public string explode(string wejdz)
{
StringBuilder sBuilder = new StringBuilder();
int id = 1;
foreach (string subStr in Regex.Split(text, @" |, |,||"))
{
sBuilder.AppendFormat("{1}\n", id++, subStr);
return String.Format("{0}", sBuilder) ;

        }
    }
    public Form1()
    {
        InitializeComponent();
    }

private void button3_Click(object sender, EventArgs e)
{
FileInfo theSourceFile = new FileInfo ( @"C:\Documents and Settings\Łukasz\Pulpit\C#\WindowsApplication1\WindowsApplication1\bin\Debug\test.txt");
StreamReader reader = theSourceFile.OpenText();
do
{
text = reader.ReadLine();
//MessageBox.Show(text);
comboBox1.Items.Add(explode(text).ToString());
MessageBox.Show(explode(text).ToString());
}
while (text != null);
}

Jeśli daje zwykłego MessageBox.Show(text) to pokazuje mi zawartość pliku (chociaż dziwnie - bo bez polskich znaków....:( )

Plik ma postać :
To|jest|skomplikowany|program|łóąćźż

Chce teraz uzyskać w MessageBoxie tekst bez "|" i wypełnić ComboBoxa wynikami...
Problem w tym że kompilator zwraca mi błąd: "Error 1 'WindowsApplication1.Form1.explode(string)': not all code paths return a value"

Wie ktoś może o co chodzi - co mam źle z tą klasą??:) i ew. czemu nie program nie widzi polskich znaków (plik utworzyłem w notatniku windowsowym - zwykły txt)??

Z góry dzięki za pomoc i cierpliwość ;)

Pozostało 580 znaków

2006-08-22 11:47
0
public string explode(string wejdz)
        {
            StringBuilder sBuilder = new StringBuilder();
            int id = 1;
            foreach (string subStr in Regex.Split(text, @" |, |,|\|"))
            {
                sBuilder.AppendFormat("{1}\n", id++, subStr);
                return String.Format("{0}", sBuilder) ;

            }
        }

Dwa bledy, z czego o jednym powiedzial Ci kompilator:

  1. metoda zakonczy sie ZAWSZE po pierwszej iteracji (return w srodku petli)
  2. Blad kompilatora: jezeli metoda cos zwraca to musi to zwracac w kazdym mozliwym wypadku - u Ciebie metoda zwroci cokolwiek tylko po pomyslnym wejsciu w foreach.

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-08-22 14:33
0

czyli jakbyś to zrobił?? (sorki że Cie męcze, ale dopiero zaczynam z C#)

Pozostało 580 znaków

2006-08-22 15:52
0

zrobiłem coś takiego:
public string explode(string wejdz)
{
StringBuilder sBuilder = new StringBuilder();
int id = 1;
foreach (string subStr in Regex.Split(text, @" |, |,||"))
{
sBuilder.AppendFormat("{1}\n", id++, subStr);
// return String.Format("{0}", sBuilder);

        }
        if (String.Format("{0}", sBuilder) != "")
        {
            return String.Format("{0}", sBuilder);
        }
        else
        {
            return String.Format("u");
        }
    }

Teraz kompilator nie zwraca błędu i funkcja wykonuje się poprawnie - tzn pokazuje zawartość pliku (dalej bez polskich znaków :/) ale po poprawnym wyświetleniu zawartości pliku zwraca błąd:
Wartość nie może być zerowa.
Nazwa parametru: input

Co teraz jest źle??:/

Pozostało 580 znaków

2006-08-23 10:29
0

Troszke sie pogubilem w tym co napisales.

Ja osobiscie zrobilbym tak, ze kazda wartosc jest w nowej linii, nastepnie TextReader i odczytujesz po linii. Bezproblemowe i bez kombinacji.

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-08-23 10:37
0

chodziło mi o 2 kod teraz ;)
po poprawce program pokazuje ładnie text, bez "|" w MessageBoxie - ale jak klikne "ok" to się wywala i pisze :
Wartość nie może być zerowa.
Nazwa parametru: input

Mógłbyś podać swój kod - taki jak Ty byś to zrobił??:)

Pozostało 580 znaków

2006-08-23 23:50
0

Oto przyklad dla dwoch roznych plikow:

Plik1.txt //twoj preferowany

To|jest|skomplikowany|program|łóąćźż

Plik2.txt //moj preferowany

To
jest
skomplikowany
program
łóąćźż

Przyklad

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

namespace Test
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Plik1.txt:");
            TextReader vReader = new StreamReader("plik1.txt", System.Text.Encoding.GetEncoding("windows-1250"));
            String vLine = "";
            while((vLine = vReader.ReadLine())!=null)
            {
                Regex vReg = new Regex("([^|]*)|");
                MatchCollection vMatches = vReg.Matches(vLine);
                foreach(Match vMatch in vMatches)
                    if(vMatch.Groups[0].Value != "")
                   Console.WriteLine(vMatch.Groups[0].Value);
            }
            vReader.Close();

            Console.WriteLine("Plik2.txt:");
            vReader = new StreamReader("plik2.txt", System.Text.Encoding.GetEncoding("windows-1250"));
            vLine = "";
            while((vLine = vReader.ReadLine())!=null)
            {
              Console.WriteLine(vLine);
            }
            vReader.Close();
            Console.Read();
        }
    }
}

Jak widac w drugim wypadku odczytywanie jest czysta przyjemnoscia :) Pierwszy sposob oczywiscie tez sie, jesli wolisz z jakiegos powodu.

Pliki zapisywane w notepad++ (zwykly notepad tez ma kodowanie windows-1250 o ile pamietam).

pozdrawiam
johny


You need to learn how to walk
before you can run

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0