Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Не могу изманить значение символа


Автор: CruelInt 14.9.2007, 18:03
Погибаю. Задали написать лабу, в остальных двух прогах справилась, а тут не могу
Цитата

// L1NET.cpp : main project file.

#include "stdafx.h"
#include <string>
#include <clocale>
using namespace System;
using namespace System::Collections::Generic;
using namespace System::IO;



int myComparison (String ^ x, String ^ y)
{
    return String::Compare(y, x);
};


int main(array<System::String ^> ^args)
{    
    List<String ^> ^ al = gcnew List<String ^>();
    StreamReader ^ c = gcnew StreamReader(gcnew FileStream("input.txt", FileMode::Open));
    try {int j=0;
     while (c->Peek()>=0){
    al->Add(c->ReadLine());
         
Цитата
Далее неодбходимо коды всех символов в строке, кроме управляющих,изменить по формуле 
(287-старый символ). Не катит, как только не делала. 


            }        
    }
    __finally {
        c->Close();
    }
    
    StreamWriter ^ d = gcnew StreamWriter(gcnew FileStream("output3.txt", FileMode::Create));
     Console::WriteLine(L"Hello World");
    try {
        for (int i=0; i<alyona->Count; i++) d->WriteLine(alyona[i]);
    }
    __finally {
        d->Close();
    }
    return 0;
}


Автор: tdebugger 14.9.2007, 22:38
Код

// Test0.cpp : main project file.

#include "stdafx.h"

using namespace System;
using namespace System::IO;

int main(array<System::String ^> ^args)
{    
    try
    {
        if(args->Length>0 && File::Exists(args[0]))
        {
            const int size=4096;
            char ch=0;
            FileStream ^fileIn=File::OpenRead(args[0]); 
            FileStream ^fileOut=File::Create(args[0]+".out");    
            array<unsigned char,1> ^bufferIn=gcnew array<unsigned char,1>(size); 
            array<unsigned char,1> ^bufferOut=gcnew array<unsigned char,1>(size);
            for(int n=0,c=0;n<fileIn->Length;)
            {
                c=fileIn->Read(bufferIn,0,size);
                for(int i=0;i<c;i++)
                { 
                    ch=bufferIn[i];
                    ch=ch<20?ch:287-ch;
                    bufferOut[i]=ch;
                }
                fileOut->Write(bufferOut,0,c);
                n+=c;
            } 
            fileIn->Close();  
            fileOut->Close(); 
            delete[]    bufferIn,bufferOut;
        }
        else
            Console::WriteLine("File not found.\n");
    }
    catch(Exception ^ex)
    {
        Console::WriteLine("Какая-то ошибка, а именно:\n {0}",ex->Message);
    }
    return 0;
}

Автор: tol05 14.9.2007, 23:05
а почему не так?
Код

// Test0.cpp : main project file.

#include "stdafx.h"

using namespace System;
using namespace System::IO;

int main(array<System::String ^> ^args)
{    
    try
    {
        if(args->Length>0 && File::Exists(args[0]))
        {
            const int size=4096;
            //char ch=0;
            FileStream ^fileIn=File::OpenRead(args[0]); 
            FileStream ^fileOut=File::Create(args[0]+".out");    
            array<unsigned char,1> ^bufferIn=gcnew array<unsigned char,1>(size); 
            //array<unsigned char,1> ^bufferOut=gcnew array<unsigned char,1>(size);
            for(int n=0,c=0;n<fileIn->Length;)
            {
                c=fileIn->Read(bufferIn,0,size);

                //for(int i=0;i<c;i++)
                //{ 
                //    ch=bufferIn[i];
                //    ch=ch<20?ch:287-ch;
                //    bufferOut[i]=ch;
                //}
                //fileOut->Write(bufferOut,0,c);

                for(int i=0;i<c;i++)
                { 
                   if(bufferIn[i]>=20) bufferIn[i]=287 - bufferIn[i];
                }
                fileOut->Write(bufferIn,0,c);
                n+=c;
            } 
            fileIn->Close();  
            fileOut->Close(); 
            delete[]    bufferIn,bufferOut;
        }
        else
            Console::WriteLine("File not found.\n");
    }
    catch(Exception ^ex)
    {
        Console::WriteLine("Какая-то ошибка, а именно:\n {0}",ex->Message);
    }
    return 0;

}

Автор: tdebugger 15.9.2007, 09:13
Согласен, буфера и одного достаточно...


Автор: CruelInt 15.9.2007, 10:17
Есть еще один момент. Нужно строки в выходной файл записать в обратном порядке.

Автор: tdebugger 15.9.2007, 13:49
Вот так, что ли:

In.txt
 a1a2a3a4
 b1b2b3b4
 c1c2c3c4

Out.txt 
 c1c2c3c4
 b1b2b3b4
 a1a2a3a4

Код

#include "stdafx.h"

using namespace System;
using namespace System::IO;

int main(array<System::String ^> ^args)
{    
    try
    {
        if(args->Length>0 && File::Exists(args[0]))
        {
            const int size=4096;
            char ch=0;
            FileStream ^fileIn=File::OpenRead(args[0]); 
            FileStream ^fileOut=File::Create(args[0]+".out"); 
            array<unsigned char,1> ^bufferIn=gcnew array<unsigned char,1>(size); 
            array<unsigned char,1> ^bufferOut=gcnew array<unsigned char,1>(size);
            
            for(int n=0,c=0,p=0;n<fileIn->Length;)
            {  
                c=fileIn->Read(bufferIn,0,size);
                for(int i=0,l=0,k=0;i<c;i++)
                {
                    ch=bufferIn[i];
                    //if(ch>=0x20)              uncomment for release
                    //    bufferIn[i]=287-ch;
                    if(ch=='\r' && i+1!=c && bufferIn[i+1]=='\n')
                    {
                        for(int j=c-i;j<c-l;j++,k++)
                            bufferOut[j]=bufferIn[k];
                        l=i+2;
                        bufferOut[c- ++k]='\n';
                        bufferOut[c- ++k]='\r';
                        continue;
                    }
                    if(i+1==c)
                        for(int j=0;j<c-l;j++,k++)
                            bufferOut[j]=bufferIn[k];
                }
                n+=c;
                fileOut->Position=fileIn->Length-n;
                fileOut->Write(bufferOut,0,c);                
            }
            fileIn->Close();  
            fileOut->Close(); 
            delete[]    bufferIn,bufferOut;
        }
        else
            Console::WriteLine("File not found.\n");
    }
    catch(Exception ^ex)
    {
        Console::WriteLine("Какая-то ошибка, а именно:\n {0}",ex->Message);
    }
    return 0;
}

Автор: CruelInt 17.9.2007, 04:06
Да, именно так. =) Всем спасибо, написала как надо. Препод у меня веселый. Лекции ведет как попало, а требует... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)