Dostałem dość duży plik Excela, który w każdym wierszu zawiera jeden zrzut klonów z naszej bazy danych Oracle, jeden z nich może wyglądać tak:

{\rtf1\ansi\deff0\deftab708{\fonttbl{\f0\fnil\fcharset0 Courier New;}{\f1\fnil\fcharset0 Arial;}{\f2\fnil\fcharset0 MS Sans Serif;}{\f3\fnil\fcharset0 Times New Roman;}{\f4\fnil\fcharset238 Times New Roman CE;}{\f5\fnil\fcharset204 Times New Roman Cyr;}{\f6\fnil\fcharset161 Times New Roman Greek;}{\f7\fnil\fcharset162 Times New Roman Tur;}{\f8\fnil\fcharset186 Times New Roman Baltic;}}{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red128\green0\blue128;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green128\blue0;\red128\green0\blue0;\red128\green128\blue128;\red255\green255\blue255;}\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1417{\*\pnseclvl1\pnucrm\pnstart1\pnhang\pnindent720{\pntxtb}{\pntxta{.}}}{\*\pnseclvl2\pnucltr\pnstart1\pnhang\pnindent720{\pntxtb}{\pntxta{.}}}{\*\pnseclvl3\pndec\pnstart1\pnhang\pnindent720{\pntxtb}{\pntxta{.}}}{\*\pnseclvl4\pnlcltr\pnstart1\pnhang\pnindent720{\pntxtb}{\pntxta{)}}}{\*\pnseclvl5\pndec\pnstart1\pnhang\pnindent720{\pntxtb{(}}{\pntxta{)}}}{\*\pnseclvl6\pnlcltr\pnstart1\pnhang\pnindent720{\pntxtb{(}}{\pntxta{)}}}{\*\pnseclvl7\pnlcrm\pnstart1\pnhang\pnindent720{\pntxtb{(}}{\pntxta{)}}}{\*\pnseclvl8\pnlcltr\pnstart1\pnhang\pnindent720{\pntxtb{(}}{\pntxta{)}}}{\*\pnseclvl9\pnlcrm\pnstart1\pnhang\pnindent720{\pntxtb{(}}{\pntxta{)}}}{\pard\ql\li0\fi0\ri0\sb0\sl\sa0 \plain\f3\fs24\cf0 FOO FOO FOO \'85\'85. \'85\'85..}}

Teraz, umieszczając te dane w .Rtf System.Windows.Forms.RichTextBox, a następnie odczytując jego wartość .Text, otrzymuję prostą konwersję. ALE, jakoś przynosi to nowe linie.

Próbowałem je usunąć przez

rtf.Replace("\n", "").Replace("\r", "").Replace(Environment.NewLine, "")

Ale wydaje się, że to nie pomaga.

Czy ktoś wie, jak mogę przekonwertować format tekstu sformatowanego na pojedynczy wiersz zwykły tekst?

4
Jason94 28 wrzesień 2012, 17:01

2 odpowiedzi

Najlepsza odpowiedź

Spójrz na ten przykład, kod wyodrębniony w celu zachowania.

ZAKTUALIZOWANE — błąd kopiowania i wklejania z programu VB.NET — przepraszam.

class ConvertFromRTF
{
    static void Main()
    {

        string path = @"test.rtf";

        //Create the RichTextBox. (Requires a reference to System.Windows.Forms.dll.)
        using(System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox());
        {

            // Get the contents of the RTF file. Note that when it is 
           // stored in the string, it is encoded as UTF-16. 
            string s = System.IO.File.ReadAllText(path);

            // Convert the RTF to plain text.
            rtBox.Rtf = s;
            string plainText = rtBox.Text;

            // Now just remove the new line constants
            plainText = plainText.Replace("\r\n", ",");

            // Output plain text to file, encoded as UTF-8.
            System.IO.File.WriteAllText(@"output.txt", plainText);
        }
    }
}
10
wal 30 czerwiec 2013, 16:26

Jak: konwertować pliki RTF na zwykły tekst (przewodnik programowania C#)

W .NET Framework można użyć kontrolki RichTextBox do utworzenia edytora tekstu obsługującego format RTF i umożliwiającego użytkownikowi stosowanie formatowania do tekstu w sposób WYSIWIG.

Możesz również użyć kontrolki RichTextBox, aby programowo usunąć kody formatowania RTF z dokumentu i przekonwertować go na zwykły tekst. Nie trzeba osadzić kontrolki w formularzu systemu Windows, aby wykonać tego rodzaju operację.

1
Kapil Khandelwal 28 wrzesień 2012, 17:03