Преобразовать таблицу в текст с пробелами - PullRequest
0 голосов
/ 03 июня 2011

Я сталкивался с этим несколько раз за пару лет программирования, поэтому я решил провести небольшое исследование, чтобы выяснить, возможно ли это. Часто я создаю структуры данных в коде, которые инициализируются в виде таблицы, со строками и столбцами, и мне бы хотелось иметь эту функцию преобразования таблиц в текст для удобства чтения кода. Как вы можете создать таблицу в слове, или Excel, или какую-либо другую программу, и вывести ячейки таблицы в текст, с пробелами (не табуляцией)? Word может делать это с помощью вкладок, а Excel может делать это со смещенными пробелами. Есть ли какая-нибудь программа, которая автоматизирует это?

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

Я потратил час или два на изучение этого. Я экспериментировал с Excel и Word, и они оба были настолько близки к точному решению, что это сводило меня с ума. Я пробовал другие программы онлайн, но безуспешно. Вот мое решение, функция Microsoft Word «Таблица в текст» и пользовательская программа на C #, которая преобразует текст в формате Word в текст с выравниванием по столбцам с пробелами, а не с табуляцией.

1) Поместите столбцы и строки в таблицу MS Word
2) Преобразовать таблицу в текст с помощью вкладок (посмотрите, как это сделать)
3) Сохраните преобразованную таблицу в простой текстовый файл
4) Используйте мою программу, чтобы открыть и преобразовать файл
5) Скопируйте текст из выходного файла в ваш код

Ниже приведено приложение C # Windows Form, которое я написал. Я прошу прощения за отсутствие оптимизации. Я был на работе и хотел сделать это как можно быстрее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            OpenFileDialog of = new OpenFileDialog();
            of.Title = "Select Tabbed Text File To Convert";

            if (of.ShowDialog() != DialogResult.OK)
                return;

            StreamReader s = new StreamReader(of.OpenFile());

            List<string> lines = new List<string>();

            string line;

            // Get each line into an array of lines.
            while ((line = s .ReadLine()) != null)
                lines.Add(line);

            int numTabs = 0;

            // count the number of tabs in each line, assume good input, i.e. 
            // all lines have equal number of tabs.
            foreach (char c in lines[0])
                if (c == '\t')
                    numTabs++;

            for (int i = 0; i < numTabs; i++)
            {
                int tabIndex = 0;

                // Loop through each line and find the "deepest" location of
                // the first tab.
                foreach (string l in lines)
                {
                    int index = 0;

                    foreach (char c in l)
                    {
                        if (c == '\t')
                        {
                            if (index > tabIndex)
                                tabIndex = index;

                            break;
                        }

                        index++;
                    }
                }

                // We know where the deepest tab is, now we go through and 
                // add enough spaces to take the first tab of each line out
                // to the deepest.
                //foreach (string l in lines)
                for (int l = 0; l < lines.Count; l++)
                {
                    int index = 0;

                    foreach (char c in lines[l])
                    {
                        if (c == '\t')
                        {
                            int numSpaces = (tabIndex - index) + 1;

                            string spaces = "";

                            for (int j = 0; j < numSpaces; j++)
                                spaces = spaces + " ";

                            lines[l] = lines[l].Remove(index, 1);
                            lines[l] = lines[l].Insert(index, spaces);

                            break;
                        }

                        index++;
                    }
                }
            }

            FileInfo f = new FileInfo(of.FileName);

            string outputFile = f.FullName.Insert(f.FullName.IndexOf(f.Extension), " (Aligned)");

            StreamWriter w = new StreamWriter(outputFile);

            foreach (string l in lines)
                w.Write(l + "\r\n");

            w.Close();
            s.Close();

            MessageBox.Show("Created the file: " + outputFile);
        }
    }
}
0 голосов
/ 03 июня 2011

Пробовали ли вы использовать моноширинный шрифт, например курьер, при экспорте из Excel?Большинство шрифтов корректируют интервал на основе конкретной ширины, высоты и кернинга каждого символа, но моноширинный шрифт позволит вам использовать пробелы для выравнивания.

Что касается автоматического преобразования табуляции в пробелы, то в противном случае должно быть 100 с.Тысячи методов, приложений, команд, доступных там.

...