Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение имени файла и записи его имени "наоборот" 
V
    Опции темы
kozhura
Дата 24.3.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Еще раз здравствуйте, наткнулся на такой косяк: уже есть у меня некая переменная string с именем 4091ab29-ebdf-4f28-9f58-a3f3e7495372 например
Код

string dsmfile = Path.GetFileNameWithoutExtension(getdsms[i].Name);

вообщем что нужно мне сделать: это имя я уже прочел, и , поворюсь, оно есть 4091ab29-ebdf-4f28-9f58-a3f3e7495372 , и нужно его записать в обратном пордядке без "-"        72 53 49 е7 и т.д в файл, но никак не соображу что делать, прошу помощи smile 
PM MAIL   Вверх
antslava
Дата 25.3.2009, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.7.2008
Где: Одесса

Репутация: 1
Всего: 2



Код

            string dsmfile = Path.GetFileNameWithoutExtension(getdsms[i].Name);
            string[] strs = dsmfile.Split(new char[] { '-' });//Удаляем из строки не нужные символы
            string result = "";
            foreach (string s in strs)
            {
                result += s;//Собираем массив в 1 строку
            }
            char[] arrayChar = result.ToCharArray();//Разбиваем строку на массив типа char
            char[] buff = new char[arrayChar.Length];//Буфер где хранится реверс
            for (int i = arrayChar.Length - 1, j = 0; i >= 0; i--, j++)
                buff[j] = arrayChar[i];
            result = "";
            foreach (char c in buff)
            {
                result += c.ToString();//Собираем строку из массива типа char, результат хранится в переменной result
            }

Так сойдет? =)
PM MAIL ICQ Skype   Вверх
NightmareZ
Дата 25.3.2009, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Подключаем:
Код

using System.Collections;
using System.Linq;
using System.Text.RegularExpressions;


Делаем:
Код

new ArrayList(new Regex(@"\w{2}").Matches(dsmfile.Replace("-", ""))).ToArray().Reverse();


Получаем IEnumerable<object>. Кастанём его элементы в string и получим, что нужно:
Код

foreach (var x in result)
    Console.WriteLine(x.ToString());



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
jonie
Дата 25.3.2009, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



так сразу Join и вызвали бы, зачем тогда цикл, раз уж используете ФВП (функции высшего порядка)...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kozhura
Дата 25.3.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



antslava ,NightmareZ 
благодарю Вас, щас попробую smile

Добавлено @ 10:57
Мужики, немного я прощитался, неправильно спросил: вот смотрите вот имя допустим 1E2F4D, вот мне его нужно записать как байты в обратном порядке в файл , т.е 4D2F1E
даже так:1061163c-50bd-44e1-a7b8-735039e8c48c 0- имя файла, убрть нужно "-",и начать зписывать так : 3C166110 - BD50E144 и т.д...

Это сообщение отредактировал(а) kozhura - 25.3.2009, 11:02
PM MAIL   Вверх
kozhura
Дата 25.3.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



кстати, на пхп я писал так (dsmfilename  - имя файла):

Код


  // dword to binary string
  //
  function dword2str ( $dw )
  {
    $r = chr($dw & 0xFF);
    $r = $r . chr(($dw>>8) & 0xFF);
    $r = $r . chr(($dw>>16) & 0xFF);
    $r = $r . chr(($dw>>24) & 0xFF);
    return $r;
  }

  // word to binary string
  //
  function word2str ( $dw )
  {
    $r = chr($dw & 0xFF);
    $r = $r . chr(($dw>>8) & 0xFF);
    return $r;
  }
$d1 = hexdec(substr($dsmfilename, 0, 8));
    $dsmnamebinary = dword2str($d1);
    $d1 = hexdec(substr($dsmfilename, 9, 4));
    $dsmnamebinary .= word2str($d1);
    $d1 = hexdec(substr($dsmfilename, 14, 4));
    $dsmnamebinary .= word2str($d1);
    $d1 = hexdec(substr($dsmfilename, 19, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 21, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 24, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 26, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 28, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 30, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 32, 2));
    $dsmnamebinary .= chr($d1);
    $d1 = hexdec(substr($dsmfilename, 34, 2));
    $dsmnamebinary .= chr($d1);

но в шарпе чото работать с сабстрингами не получается...
PM MAIL   Вверх
PashaPash
Дата 25.3.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Цитата(kozhura @  25.3.2009,  10:46 Найти цитируемый пост)
даже так:1061163c-50bd-44e1-a7b8-735039e8c48c 0- имя файла, убрть нужно "-",и начать зписывать так : 3C166110 - BD50E144 и т.д...

если именно для таких строк, и именно в таком порядке, то:
Код

            byte [] bytesToWrite = new Guid("1061163c-50bd-44e1-a7b8-735039e8c48c").ToByteArray();



--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 25.3.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Цитата(antslava @  25.3.2009,  05:24 Найти цитируемый пост)
            string dsmfile = Path.GetFileNameWithoutExtension(getdsms[i].Name);
            string[] strs = dsmfile.Split(new char[] { '-' });//Удаляем из строки не нужные символы
            string result = "";
            foreach (string s in strs)
            {
                result += s;//Собираем массив в 1 строку
            }
            char[] arrayChar = result.ToCharArray();//Разбиваем строку на массив типа char
            char[] buff = new char[arrayChar.Length];//Буфер где хранится реверс
            for (int i = arrayChar.Length - 1, j = 0; i >= 0; i--, j++)
                buff[j] = arrayChar[i];
            result = "";
            foreach (char c in buff)
            {
                result += c.ToString();//Собираем строку из массива типа char, результат хранится в переменной result
            }


antslava, Ваш код можно превратить в это:
Код

            string dsmfile = Path.GetFileNameWithoutExtension(getdsms[i].Name);
            dsmfile = dsmfile.Replace("-", ""); //Удаляем из строки не нужные символы
            char[] arrayChar = result.ToCharArray(); //Разбиваем строку на массив типа char
            Array.Reverse(arrayChar);
            string result = new string(arrayChar);

Но он все равно не удовлетворяет просьбе топикастера, так как перевернет символы в строке, а не значения байтов...

Вот рабочий код:
Код

            string fileName = Path.GetFileNameWithoutExtension("c:\\4091ab29-ebdf-4f28-9f58-a3f3e7495372.ext");

            StringBuilder temp = new StringBuilder(fileName);
            temp.Replace("-", null);

            for (int i = 0; i < 16; i += 2)
            {
                char ch = temp[i];
                temp[i] = temp[30 - i];
                temp[30 - i] = ch;

                ch = temp[i + 1];
                temp[i + 1] = temp[31 - i];
                temp[31 - i] = ch;
            }

            string reversedGuid = temp.ToString();



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
-Mikle-
Дата 25.3.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Цитата(PashaPash @  25.3.2009,  14:47 Найти цитируемый пост)
 byte [] bytesToWrite = new Guid("1061163c-50bd-44e1-a7b8-735039e8c48c").ToByteArray();

Не выйдет, так как порядок следования байтов в массиве не соответствует порядку в сроке.
Любой GUID - это int, short, short, byte[8].
Так что если уж именно через него хочется, то тогда придется делать так:
Код

            Guid guid = new Guid(fileName);
            byte[] btsGuid = guid.ToByteArray();
            // перевернем все так, чтоб последовательность соответствовала обратному порядку в строке
            Array.Reverse(btsGuid);
            Array.Reverse(btsGuid, 8, 2);
            Array.Reverse(btsGuid, 10, 2);
            Array.Reverse(btsGuid, 12, 4);

            // далее два пути преобразования в строку
            // 1. через создание новой строки
            StringBuilder tempstr = new StringBuilder(32);
            for (int i = 0; i < btsGuid.Length; i++)
                tempstr.Insert(i * 2, btsGuid[i].ToString("x"));
            fileName = tempstr.ToString();
            //
            // ИЛИ
            // 2. через Guid
            // перевернем все так, чтоб Guid понял нас правильно\
            Array.Reverse(btsGuid, 0, 4);
            Array.Reverse(btsGuid, 4, 2);
            Array.Reverse(btsGuid, 6, 2);
            guid = new Guid(btsGuid);
            fileName = guid.ToString("N");


Что быстрее работает, решать автору...
1. NightmareZ
2. 
Цитата(-Mikle- @  25.3.2009,  14:51 Найти цитируемый пост)
Вот рабочий код

3. в этом топике


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 25.3.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Цитата(-Mikle- @  25.3.2009,  12:21 Найти цитируемый пост)
Не выйдет, так как порядок следования байтов в массиве не соответствует порядку в сроке.
Любой GUID - это int, short, short, byte[8].

А ты попробуй, вдруг выйдет. Я ж проверяю код перед постингом.
Код

            byte [] bytesToWrite = new Guid("1061163c-50bd-44e1-a7b8-735039e8c48c").ToByteArray();
            string s = String.Join("", bytesToWrite.Select(b => b.ToString("x")).ToArray());

3c166110bd50e144a7b8735039e8c48c
Цитата(kozhura @  25.3.2009,  10:46 Найти цитируемый пост)
и начать зписывать так : 3C166110 - BD50E144 и т.д...




--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 25.3.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Приношу свои извенения, я не заметил поправку топикастера

Цитата(kozhura @  25.3.2009,  13:46 Найти цитируемый пост)
Добавлено @ 13:57
Мужики, немного я прощитался, неправильно спросил: вот смотрите вот имя допустим 1E2F4D, вот мне его нужно записать как байты в обратном порядке в файл , т.е 4D2F1E
даже так:1061163c-50bd-44e1-a7b8-735039e8c48c 0- имя файла, убрть нужно "-",и начать зписывать так : 3C166110 - BD50E144 и т.д...


Все что я писал относилось к первому посту
Цитата(kozhura @  25.3.2009,  02:55 Найти цитируемый пост)
вообщем что нужно мне сделать: это имя я уже прочел, и , поворюсь, оно есть 4091ab29-ebdf-4f28-9f58-a3f3e7495372 , и нужно его записать в обратном пордядке без "-"        72 53 49 е7 и т.д в файл


Так что с субъективной точки зрения я все таки прав  smile 

Порядок следования байтов в массиве, конечно же, уже соответствует тому, который требуется автору топика (после поправки)...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
kozhura
Дата 25.3.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



спасибо, всем +1! только последнее как мне конвертнуть строку в байты?
Код

string s = String.Join("", bytesToWrite.Select(k => k.ToString("x")).ToArray());

long l = Long.Parse(s.Trim()); не катит...
PM MAIL   Вверх
-Mikle-
Дата 25.3.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



не нужно конвертировать
bytesToWrite это и есть то что тебе нужно


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 25.3.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Не топик, а битва экстрасенсов smile


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.