Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 161 162

Открыть новую тему     Написать ответ в эту тему

blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dneprcomp
Ничего не изменилось

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 23:48 08-11-2009
archimed7592

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
Ты странно как-то сравниваешь два текста - как будто ему оставили одну и ту же длину и заменили некоторые символы на другие - очень редкий случай, надо сказать.
 
Также, изменения могут быть с обоих сторон (информация может как добавиться, так и удалиться).
 
Т.е. во-первых, тебе необходимо иметь два счётчика - один для позиции в левом, другой - в правом.
Во-вторых, при нахождении несоответствия тебе нужно явно определять - добавилась информация в правом тексте. Это не так просто сделать, как кажется с первого взгляда.
Определив характер изменения нужно выделять соответсвующий диапазон справа или слева (зависит от характера изменения) и синхронизировать позиции.
 
Вот примерный код (в нём предусмотрены далеко не все возможные случаи).
 

Код:
 
Color addColor = Color.LightGreen,
      removeColor = Color.OrangeRed;
 
string t1 = rtb1.Text, t2 = rtb2.Text;
 
int contiguousWidth = 3;
 
/*Compares two files*/
int pos1 = 0, pos2 = 0;
while (pos1 < t1.Length && pos2 < t2.Length)
{
    if (t1[pos1] == t2[pos2])
    {   // skip matching characters
        ++pos1;
        ++pos2;
        continue;
    }
 
    // determine change disposition
    string piece1 = t1.Substring(pos1, Math.Min(contiguousWidth, t1.Length - pos1));
    string piece2 = t2.Substring(pos2, Math.Min(contiguousWidth, t2.Length - pos2));
 
    int m1 = t1.IndexOf(piece2, pos1);
    int m2 = t2.IndexOf(piece1, pos2);
 
    if (m1 == -1 && m2 == -1)
        throw new NotImplementedException("implement it yourself");
 
    if (m1 != -1 && m2 != -1)
    {
        if (m1 >= m2)
            m1 = -1;
        else
            m2 = -1;
    }
 
    if (m1 == -1)
    { // in t2 there is new content, let's mark it green
 
        if (m2 == pos2)
            throw new Exception("something wrong");
 
        rtb2.Select(pos2, m2 - pos2);
        rtb2.SelectionBackColor = addColor;
        pos2 = m2;
    }
 
    if (m2 == -1)
    { // in t2 text was deleted, let's mark it red
 
        if (m1 == pos1)
            throw new Exception("something wrong");
 
        rtb1.Select(pos1, m1 - pos1);
        rtb1.SelectionBackColor = removeColor;
        pos1 = m1;
    }
}
 
if (pos1 < t1.Length) // text left in t1 was removed in t2
{
    rtb1.Select(pos1, t1.Length - pos1);
    rtb1.SelectionBackColor = removeColor;
}
 
if (pos2 < t2.Length) // text left in t2 was added
{
    rtb2.Select(pos2, t2.Length - pos2);
    rtb2.SelectionBackColor = addColor;
}
 
 

Всего записей: 159 | Зарегистр. 07-08-2005 | Отправлено: 04:10 09-11-2009 | Исправлено: archimed7592, 04:11 09-11-2009
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
archimed7592
Я ничего не понял из того, что ты написал. Зачем все усложнять? Ты знаешь, эта функция (представленная выше) это всего лишь курсовая. Я до сего дня не писал на C# большие програмы, только маленькие консольные приложения. Мне сейчас нужно что то простое, а не переписывать пол винды.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 23:25 09-11-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
Посимвольная выбирка в коде что-то смущает. Попробуй заменить строку

Код:
if (rtb2.Text(i) != rtb1.Text(i))  
на полную построчную адресацию

Код:
if rtb2.Lines(X).Substring(i, 1) != rtb1.Lines(X).Substring(i, 1)

В коде выбирается с i-го символа длиной 1 символ в строке # X

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 04:04 10-11-2009 | Исправлено: dneprcomp, 06:31 10-11-2009
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dneprcomp
Я об этом вчера как раз думал. Что если взять из обоих текстов по строке и сравнить их посимвольно? ИМХО так будет меньше ошибок.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 13:02 10-11-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
Просто используй вложенные циклы. Один для строк. Второй для символов.
Что-то вроде

Код:
for (x = 1; x < [lines quantity]; x++)  
for (i = 0; i < rtb1.TextLength-1; i++)  
if rtb2.Lines(X).Substring(i, 1) != rtb1.Lines(X).Substring(i, 1)  

Вот не помню я как в richtextbox строки посчитать Ну, сам найдешь.  
 

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:26 10-11-2009
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Читаю из текстового файла и получаю крякозябры вместо русских букв. Подскажите, пожалуйста, чего не хватает?
 
StreamReader streamReader = new StreamReader("aa.txt");
string strLine;
while (streamReader.Peek() != -1) {
  strLine = streamReader.ReadLine();
}

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 16:24 15-11-2009
Denchik



Двоечник
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
указать кодировку 1251 при создании объекта StreamReader

Код:
public StreamReader(string path, Encoding encoding)
 
path
Type: System..::.String
The complete file path to be read.  
encoding
Type: System.Text..::.Encoding
The character encoding to use.  

Всего записей: 8889 | Зарегистр. 06-02-2002 | Отправлено: 16:40 15-11-2009
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, вставил
Encoding encoding = System.Text.Encoding.Default;
и заменил
StreamReader streamReader = new StreamReader("aa.txt", encoding);
Работает ! Спасибо
 
ЗЫ
А можно и просто так
StreamReader streamReader = new StreamReader("aa.txt", System.Text.Encoding.Default);
Спасибо

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 17:05 15-11-2009 | Исправлено: ppkp, 17:08 15-11-2009
tyghr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
переношу код из vb6 в vb.net
как вот это делается в .net?
 
ScaleX(x, Me.ScaleMode, vbPixels)

Всего записей: 89 | Зарегистр. 14-03-2007 | Отправлено: 16:06 16-11-2009
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня один и тот же цикл на Delphi и на C#. На C# вычисляется в 3 раза дольше.
Это так и положено (из-за Framework) или у меня чего-то не так?

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 21:15 18-11-2009
Lihonosov

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
Вы бы код самих циклов показали...

Всего записей: 537 | Зарегистр. 05-07-2007 | Отправлено: 09:58 19-11-2009
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот циклы

Код:
 
//Delphi
function TTopoGrid.InvDistProc(APow: double; ALines: TPoint; AStep: TPoint2D; AMin: TPoint3D): integer;
var
    row, col, pnt: integer;
    pow2: double;
    Grow, Diff: TPoint2D;
    zval, wg2, wg1: double;
begin
    Result := -1;
 
    pow2 := APow/2.0;
    for row:=0 to ALines.Y-1 do begin
        if Assigned(FOnCalcProgress) then FOnCalcProgress(row, ALines.Y);
 
        Grow.Y := AMin.Y + row*AStep.Y;
        for col:=0 to ALines.X-1 do begin
            if Assigned(FOnCalcCancel) then if FOnCalcCancel then Exit;
 
            Grow.X := AMin.X + col*AStep.X;
 
//            FindNearPoints(Grow);
            case FSearchMethod of
            smNorm: FindPoints0(Grow);
            smQuad: FindPointsN(4, Grow);
            smOct: FindPointsN(8, Grow);
            smAll: FNearPoints := FTopoData.Count;
            end;
 
            zval := 0.0;
            wg2 := 0.0;
            for pnt:=0 to FNearPoints-1 do begin
//                Diff.X := Grow.X - PPoint3D(FTopoData.Items[FPointsPtr[pnt]])^.X;
//                Diff.Y := Grow.Y - PPoint3D(FTopoData.Items[FPointsPtr[pnt]])^.Y;
                Diff.X := Grow.X - TopoData[FPointsPtr[pnt]].X;
                Diff.Y := Grow.Y - TopoData[FPointsPtr[pnt]].Y;
                wg1 := Power(Diff.X*Diff.X + Diff.Y*Diff.Y, pow2);
                if wg1 < MinDouble then wg1 := MinDouble;
//                zval := zval + PPoint3D(FTopoData.Items[FPointsPtr[pnt]])^.Z/wg1;
                zval := zval + TopoData[FPointsPtr[pnt]].Z/wg1;
                wg2 := wg2 + 1.0/wg1;
            end;
 
            if wg2 > 0.0 then
                FGrid[col][row] := zval/wg2
            else
                FGrid[col][row] := MaxDouble;
        end;
    end;
    Result := ALines.Y;
end;
 
//C#
        private int InvDistProc(double APow, Point ALines, Point2D AStep, Point3D AMin) {
            int row, col, pnt;
            double pow2;
            double GrowX, GrowY, DiffX, DiffY;
            double zval, wg2, wg1;
 
            pow2 = APow / 2.0;
            for (row = 0; row < ALines.Y; row++) {
                CalcEvent.CalcProgressHandler(row + 1, ALines.Y);
 
                GrowY = AMin.Y + row * AStep.Y;
                for (col = 0; col < ALines.X; col++) {
//                    if (CalcEvent.CalcCancelHandler()) return -2;
 
                    GrowX = AMin.X + col * AStep.X;
 
//                    FindNearPoints(Grow);
                    switch (FSearchMethod) {
                        case TSearchMethod.smNorm: FindPoints0(GrowX, GrowY); break;
                        case TSearchMethod.smQuad: FindPointsN(4, GrowX, GrowY); break;
                        case TSearchMethod.smOct: FindPointsN(8, GrowX, GrowY); break;
                        case TSearchMethod.smAll: FNearPoints = FTopoData.Count; break;
                    }
 
                    zval = 0.0;
                    wg2 = 0.0;
                    for (pnt = 0; pnt < FNearPoints; pnt++) {
                        DiffX = GrowX - FTopoData[FPointsPtr[pnt]].X;
                        DiffY = GrowY - FTopoData[FPointsPtr[pnt]].Y;
                        wg1 = Math.Pow(DiffX * DiffX + DiffY * DiffY, pow2);
                        if (wg1 < double.MinValue) wg1 = double.MinValue;
                        zval = zval + FTopoData[FPointsPtr[pnt]].Z / wg1;
                        wg2 = wg2 + 1.0 / wg1;
                    }
 
                    if (wg2 > 0.0)
                        FGrid[col, row] = zval / wg2;
                    else
                        FGrid[col, row] = double.MaxValue;
                }
            }
            return ALines.Y;
        }
 

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 14:52 19-11-2009 | Исправлено: ppkp, 16:10 20-11-2009
violant



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста
ASP.NET на C#
Описание:Пишу репорты из базы. Нужен репорт такой чтобы в селект подставлялась дата из календаря (Calendar1) на форме с SqlDataSource1

Код:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"  
                        ConnectionString="<%$ ConnectionStrings:hmlog_con %>"  
                        ProviderName="<%$ ConnectionStrings:hmlog_con.ProviderName %>"  
                        SelectCommand="SELECT hmlog.hmlog.* FROM hmlog.hmlog WHERE (eventtime LIKE '2009-10-08%')">
                    </asp:SqlDataSource>

Вопрос:Как подставить дату Calendar1.SelectedDate с контрола Calendar1 при действии Calendar1_SelectionChanged в вышеприведенный селект причем в формате yyyy-mm-dd?  
Предполог решение: Думаю нужна текстовая переменная а потом конкатинацией в вышеприведенный код.

Всего записей: 364 | Зарегистр. 08-11-2006 | Отправлено: 21:58 19-11-2009 | Исправлено: violant, 22:01 19-11-2009
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
violant
А в чем проблема в событии SelectionChanged присвоить нужный запрос? Что-то в таком духе:
 
SqlDataSource1.SelectCommand = string.Format("SELECT ... LIKE '{0:yyyy-MM-dd}%'", CalendarDate);
 
А еще честнее и правильнее будет в LIKE один раз определить параметр @CalendarDate, определить его в   SelectParameters у SqlDataSource, и в обработчике присваивать только этот параметр в нужном формате.
 
Я так понял поле даты у тебя текстовое?

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 22:39 19-11-2009
sashka01



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
народ.. помогите написать простой WORDPAD... в C#

Всего записей: 6 | Зарегистр. 31-10-2009 | Отправлено: 17:17 21-11-2009
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sashka01

Цитата:
помогите написать простой WORDPAD... в C#

Надо создать окно, в котором будет RichTextBox и куча кнопочек, на которые будут завязаны функции этого самого RichTextBox-а и их применение к выделенным частям текста.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 10:38 22-11-2009
derelict



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sashka01
Посмотри тут: WordPad in C#

Всего записей: 232 | Зарегистр. 11-06-2006 | Отправлено: 12:25 22-11-2009
numetalist



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Блин, уже не помню регулярные выражения с универа. Как написать шаблон для такой строки
"Начало строки или любая последовательность, обязательно пристутсвующий фрагмент, любая последовательность или конец"?

Всего записей: 26 | Зарегистр. 05-02-2008 | Отправлено: 15:04 22-11-2009
BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ppkp
Во первых почему  решил, что циклы работают медленнее на C# ? Да и потом не понятно как работают процедуры из циклов? может в них проблема?

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 06:27 23-11-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 161 162

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru