Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
.NET 4.x

Как считать из элементов массива первые три символа

26.08.2014, 14:27. Показов 4845. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос такой:
Имеется массив из строковых элементов. Перебор элементов не представляет проблем. Как в каждом элементе прочитать первые три символа и сохранить их в другой массив?
Я делал так, не работает. Объявление переменных соответственно есть.
C#
1
2
3
4
5
                for (int i = 0; i < matrix.Length; i++)
                {
                    nn = matrix[i].Substring(0, 3);
                    
                }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.08.2014, 14:27
Ответы с готовыми решениями:

Вывести первые три символа и последний три символа, если длина строки больше 5
Дана строка. Вывести первые три символа и последний три символа, если длина строки больше 5. Иначе вывести первый символ столько раз,...

Дана строка. Вывести первые три символа и последние три символа
Доброе утро, господа. Необходима Ваша помощь по решению этого вопроса, вроде как и не сложно, но в Delphi только-только начал разбираться,...

Поменять местами первые три и последние три символа исходного слова
В ячейке А1 записано слово. Поменять местами первые три и последние три символа исходного слова. Результат вывести в ячейку С1. Макрос...

25
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
26.08.2014, 14:46
Цитата Сообщение от kladim Посмотреть сообщение
Как в каждом элементе прочитать первые три символа и сохранить их в другой массив?
Вот
C#
1
2
3
4
5
string[] matrix = {"1Line1", "2Line2", "3Line3"};
string[] nn = new string[matrix.Length];
 
for (int i = 0; i < matrix.Length; i++)
                nn[i] = matrix[i].Substring(0, 3);
C#
1
2
3
4
5
using System.Linq;
//...............................................
 
string[] matrix = { "1Line1", "2Line2", "3Line3" };
string[] nn = matrix.Select(x=>x.Substring(0, 3)).ToArray();
1
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 14:53  [ТС]
простите, что не указал что переменная nn - это массив. Скопировал вариант, в котором хотел присвоить значение строке. Исправил, все равно выдает вот это:
"Additional information: Ссылка на объект не указывает на экземпляр объекта."

Попробую, второй вариант....

Добавлено через 4 минуты
Цитата Сообщение от sk007 Посмотреть сообщение
C#
1
string[] nn = matrix.Select(x=>x.Substring(0, 3)).ToArray();
А что за выражения x=>x?
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
26.08.2014, 15:06
Цитата Сообщение от kladim Посмотреть сообщение
А что за выражения x=>x?
Это лямбда выражение
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 15:11  [ТС]
Цитата Сообщение от sk007 Посмотреть сообщение
Это лямбда выражение
Выплевывает вот это
"Error 1 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable< char[]>' to 'string[]' C:\Users\ed-azarevichda\documents\visual studio 2013\Projects\WindowsFormsApplication3\W indowsFormsApplication3\Form1.cs 140 38 WindowsFormsApplication3
"
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
26.08.2014, 15:21
Можете показать весь свой код?
0
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
26.08.2014, 15:24
kladim, пришлите ваш код. как вы объявляете массив nn?
А лучше пришлите полностью.
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 15:24  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private string substation;
        private string profibus;
        
 
        private void выборПапкиToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                lblPath.Text = folderBrowserDialog1.SelectedPath;
            }
        }
        static void formatTitul ()
        {
 
        }
 
        private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e)
        {
 
        }
 
        private void btnStart_Click(object sender, EventArgs e)
        {
            //Приложение №1
           
                var excel = new Excel.Application();
                excel.Workbooks.Add();
                Excel._Worksheet Otchet = (Excel.Worksheet)excel.ActiveSheet;
                //Наименование каналов учета
                var konfigkanala = new Excel.Application();
                konfigkanala.Workbooks.Open(folderBrowserDialog1.SelectedPath + @"\Наименование каналов учета.xls");
                Excel._Worksheet istok = (Excel.Worksheet)konfigkanala.ActiveSheet;
                //Коэффициенты датчиков
                var koefficient = new Excel.Application();
                koefficient.Workbooks.Open(folderBrowserDialog1.SelectedPath + @"\Коэффициеты датчиков .xls");
                Excel._Worksheet datchiki = (Excel.Worksheet)koefficient.ActiveSheet;
 
 
 
                
                //Форматирование таблицы
                Otchet.Cells[1, "H"] = "Приложение 1";
                Otchet.Cells[2, "A"] = "Наименование каналов учета АИИСКУЭ " + substation + " Сикон С70 Profibus " + profibus;
                Otchet.Cells[4, "A"] = "№ точки учета";
                Otchet.Cells[4, "B"] = "№ канала";
                Otchet.Cells[4, "C"] = "Наименование точки учета";
                Otchet.Cells[4, "D"] = "Вид энергии";
                Otchet.Cells[4, "E"] = "Тип счетчика";
                Otchet.Cells[4, "F"] = "КТТ";
                Otchet.Cells[4, "G"] = "КТН";
                Otchet.Cells[4, "H"] = "Расчетный коэффициент";
                Otchet.Cells[5, "A"] = "1";
                Otchet.Cells[5, "B"] = "2";
                Otchet.Cells[5, "C"] = "3";
                Otchet.Cells[5, "D"] = "4";
                Otchet.Cells[5, "E"] = "5";
                Otchet.Cells[5, "F"] = "6";
                Otchet.Cells[5, "G"] = "7";
                Otchet.Cells[5, "H"] = "8";
                //Настройка столбцов в документе Наименование каналов учета
                Otchet.get_Range("A:A").ColumnWidth = 13.57;
                Otchet.get_Range("B:B").ColumnWidth = 9;
                Otchet.get_Range("C:C").ColumnWidth = 21.71;
                Otchet.get_Range("D:D").ColumnWidth = 21.71;
                Otchet.get_Range("E:E").ColumnWidth = 22.86;
                Otchet.get_Range("F:F").ColumnWidth = 9.14;
                Otchet.get_Range("G:G").ColumnWidth = 20.14;
                Otchet.get_Range("H:H").ColumnWidth = 19.43;
                Otchet.get_Range("A4", "H5").Font.Size = 14;
                Otchet.get_Range("A4", "H5").Font.Italic = false;
                Otchet.get_Range("A4", "H5").Font.Name = "Times New Roman";
                Otchet.get_Range("A4", "H5").ShrinkToFit = false;
                Otchet.get_Range("A4", "H5").HorizontalAlignment = Excel.Constants.xlCenter;
                Otchet.get_Range("A4", "H5").VerticalAlignment = Excel.Constants.xlCenter;
                Otchet.get_Range("A4", "H5").WrapText = true;
                //Редактируем ячйеку для "приложения"
                Otchet.get_Range("H1", "H1").Font.Size = 10;
                Otchet.get_Range("H1", "H1").Font.Italic = true;
                Otchet.get_Range("H1", "H1").Font.Name = "Times New Roman";
                //Редактируем ячйеку для Титульника
                Otchet.get_Range("A2", "H2").Font.Size = 20;
                Otchet.get_Range("A2", "H2").Font.Italic = false;
                Otchet.get_Range("A2", "H2").Font.Name = "Times New Roman";
                Otchet.get_Range("A2", "H2").MergeCells = true;
                Otchet.get_Range("A2", "H2").HorizontalAlignment = Excel.Constants.xlCenter;
                Otchet.get_Range("A2", "H2").VerticalAlignment = Excel.Constants.xlCenter;
                //Заполняем приложение 1
                for (int i = 6; i < 70; i++)
                {
                    //Заполняем количество каналов учета
                    if (konfigkanala.Cells[i - 4, "B"].Value != "")
                    {
                        Otchet.Cells[i, "B"] = konfigkanala.Cells[i - 4, "A"];
                        Otchet.Cells[i, "C"] = konfigkanala.Cells[i - 4, "B"];
                    }
 
                }
                
                int n = 6;
                while (konfigkanala.Cells[n - 4, "B"].Value2 != "")
                {
 
                    Otchet.Cells[n, "B"] = konfigkanala.Cells[n - 4, "A"];
                    Otchet.Cells[n, "C"] = konfigkanala.Cells[n - 4, "B"];
                    Otchet.Cells[n, "H"] = koefficient.Cells[n - 4, "C"];
                    n++;
                }
                //Считывание данных в массив для табуляции
                var konf = new Excel.Application();
                konf.Workbooks.Open(folderBrowserDialog1.SelectedPath + @"\Конфигурация каналов учета.xls");
                Excel._Worksheet konfig_kanala = (Excel.Worksheet)konf.ActiveSheet;
                string[] matrix = new string[64];
                //Заполняем массив из файла "Конфигурация каналов учета"
                for (int i = 2; i < 65; i++)
                {
                    matrix[i - 2] = (string)((konf.Cells[i, "C"] as Excel.Range).Value);
                    
                }
                //Разбор данных из массива matrix
                string[] newstring = matrix.Select(x =>x.Substring(0,3).ToArray());
                string nn;
                for (int i = 0; i < matrix.Length; i++)
                {
                    //newstring[i] = matrix.Select(x=>x)[i].Substring(0, 3);
                    Otchet.Cells[i+6, "F"] = newstring[i];
                }
 
                
                excel.Visible = true;
                koefficient.Quit();
                konf.Quit();
                konfigkanala.Quit();
            substation = txtbSubstation.Text;
            profibus = txtbProfibus.Text;
           
            
            
            
        }
    }
}
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
26.08.2014, 15:28
вот в этом месте
C#
1
string[] newstring = matrix.Select(x =>x.Substring(0,3).ToArray());
должна быть
C#
1
string[] newstring = matrix.Select(x =>x.Substring(0,3)).ToArray();
И еще одно зачем вам в вашей программе переменная string nn; она вроде нигде и не используется.
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
26.08.2014, 15:36
sk007, мб я плохо вижу...
Но в чем разница между "вот в этом месте" и "должна быть "
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 15:36  [ТС]
строки 131 - 147
0
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
26.08.2014, 15:37
some_name, (0,3)).ToArray()
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 15:43  [ТС]
Строки 131-147
Сделал так
C#
1
string[] newstring = matrix.Select(x =>x.Substring(0,3)).ToArray();
Выдает вот так
Additional information: Ссылка на объект не указывает на экземпляр объекта.

Добавлено через 3 минуты
Цитата Сообщение от sk007 Посмотреть сообщение
И еще одно зачем вам в вашей программе переменная string nn; она вроде нигде и не используется.
Далее она будет использоваться, будет объединение ячеек если данные (первые три символа) равны.
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
26.08.2014, 15:44
Цитата Сообщение от kladim Посмотреть сообщение
Выдает вот так
Additional information: Ссылка на объект не указывает на экземпляр объекта.
Проверьте заполняется ли массив matrix, возможно она или один из его элементов пуста
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 15:48  [ТС]
А почему среда не сообщает об ошибке... То есть для нее все правильно, а ошибка выскакивает в момент выполнения. В массиве matrox хранятся ссылки а не значения? или как?

Добавлено через 2 минуты
Цитата Сообщение от sk007 Посмотреть сообщение
Проверьте заполняется ли массив matrix, возможно она или один из его элементов пуста
там пустых нет... Сейчас проверю на заполненных ячейках. Получается, что если в массиве есть пустые элементы то будет ошибка?!?!
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
26.08.2014, 15:48
C#
1
2
3
4
5
6
7
8
9
10
11
12
        string[] initialText = new string[]
        {
            "Я сижу и смотрю",
            "В чужое небо из чужого окна",
            "И не вижу ни одной",
            "Знакомой звезды",
            "Я ходим по всем дорогам",
            "И туда и сюда",
            "Оглянулся и не смог",
            "Разглядеть срезы"
        };
        string[] shortText = initialText.Select(x => x.Substring(0, 3)).ToArray();
//Out
Я с
В ч
И н
Зна
Я х
И т
Огл
Раз
1
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
26.08.2014, 15:50
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            string[] matrix = new string[64];
            //Заполняем массив из файла "Конфигурация каналов учета"
            for (int i = 2; i < 65; i++)
            {
                matrix[i - 2] = (string)((konf.Cells[i, "C"] as Excel.Range).Value);
 
            }
            //Разбор данных из массива matrix
            string[] newstring = new string[matrix.Length];
 
            for (int i = 0; i < matrix.Length; i++)
            {
                if (matrix[i] != "") newstring[i] = matrix[i].Substring(0, 3);
                else newstring[i] = " ";
            }
 
            for (int i = 0; i < matrix.Length; i++)
            {
                Otchet.Cells[i + 6, "F"] = newstring[i];
            }
Пустые ячейки заполняться пробелами
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 15:54  [ТС]
ячейки заполнены сведениями об устройствах, если их нет то в ячейку ставятся -------. Непонятно, что за символы или минус или тире... скорее всего минусы . Если в Екселе кликнуть по ячейке с таким содержанием а потом на другой, то в строку формул передастся ссылка на последнюю кликнутую ячейку. Хорошо, пусть это будет минус, но в массив он идет как текст?!?!
0
 Аватар для awp-sirius
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
26.08.2014, 15:56
у вас массив строк string[] matrix, что бы вы туда не запихнули (если запихнётся), то это будет в виде текста.
Не важно минус, тире или цифры. Одним словом string
0
5 / 5 / 1
Регистрация: 21.09.2013
Сообщений: 66
26.08.2014, 16:02  [ТС]
Цитата Сообщение от awp-sirius Посмотреть сообщение
Не важно минус, тире или цифры. Одним словом string
Согласен! Он проглатывает на отлично, чтение в массив. Сделал вывод в отчетный файл, все ровно эти минусы попадают тоже. Что за беда..... Может просто проверить равны ли элементы друг другу да и все...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.08.2014, 16:02
Помогаю со студенческими работами здесь

Как из переменной с типом string получить только первые три символа
Такова задача нужно из переменной с типом string вытянуть только первые три символа, как это сделать? #include &lt;string.h&gt; ...

Вывести первые и последние три символа строки
Дана строка. Вывести первые три символа и последний три символа, если длина строки больше 5. Иначе вывести первый символ столько раз,...

Удалить первые два-три символа с компонента Едит
Мир всем и привет помогите пожалуйста, как мне удалит первые два три символа с компонента Едит ? пример символов: IDD22345678 эти...

Функция возвращающая первые и последние три символа строки
Решить поставленнуюзадачу с примененим функции. Описать функцию Count(S), возвращающую первые три символа и последнике три символа, если...

Переставить первые три и последние три элемента одномерного динамического массива
Дан одномерный массив из N элементов. Переставить первые три и последние три элемента, сохранив порядок их следования. Массив должен быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru