|
|
|
Железный канал: «C#» |
|
|
Мамонт
1818 EGP
                Рейтинг канала: 7(671) Репутация: 470 Сообщения: 9083 Откуда: Кайнозойская эра Зарегистрирован: 29.09.2003
 |
|
Пусть лучше название файла, будет в самом коде файла, его и проверяет.
_________________ Misereatur nostri omnipotens Deus et, dimissis peccatis nostris, perducat nos ad vitam aeternam. Amen. |
|
|
M.Hunter
515 EGP
    Репутация: 44 Сообщения: 2363 Откуда: Казань Зарегистрирован: 28.03.2002
 |
|
Мамонт : |
Пусть лучше название файла, будет в самом коде файла, его и проверяет.
|
У меня по условию задания нужно проверять само название файла. А проверять только тег <Name> проще чем название файла?
|
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
M.Hunter : |
А проверять только тег <Name> проще чем название файла?
|
Абсолютно одинаково: if (IsFileNameValid(fileName)) {lalala;}
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
Тот, кто писал условие, дурак. Так ему и передай. Можешь на меня сослаться.
_________________ Люблю свободный полёт... :) |
|
|
Minx
1011 EGP
        Рейтинг канала: 2(19) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
M.Hunter : |
А проверять только тег <Name> проще чем название файла?
|
И там и там у тебя строка, которую нужно проверить на формат.
Т.е. делаешь отдельную функцию (IsFileNameValid по Grebomet'y), которой на вход подается строка (имя файла на проверку), а на выходе true/false.
Далее, если тебе нужно проверить имя файла, то берешь это имя (из какого там диалога что пользователь выбирает), скармливаешь функции IsFileNameValid, и реагируешь соответственно.
Потом надо проверить также поле Name в XML. Берешь содержимое поля как строку, отдаешь в ту же функцию, и реагируешь соответственно.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
SecondShadow
365 EGP
     Рейтинг канала: 6(375) Репутация: -4 Сообщения: 1454 Заблокирован Откуда: Бийск. Алтай. Зарегистрирован: 09.02.2008
 |
|
AnrDaemon : |
Тот, кто писал условие, дурак. Так ему и передай. Можешь на меня сослаться.
|
С заданием все в порядке.
Есть имя файла и при создании файла именно это имя прописывается в сам файл (структура же показана).
Пример. Нужно проверить не переименовывался ли файл ручками уже после создания, или не пытаются ли вам подсунуть файл с правильным именем, но внутри другой.
_________________ Склероз - классная болезнь, ничего не болит и новости каждый день. |
|
|
AnrDaemon
864 EGP
        Рейтинг канала: 8(796) Репутация: 37 Сообщения: 12322
Зарегистрирован: 17.10.2004
 |
|
Ещё раз - имени файла может просто НЕ БЫТЬ! Необходимо и достаточно, чтобы внутренняя структура файла соответствовала ожидаемому формату хранения. ВСЁ!
Если соответствует (все ожидаемые теги присуствуют и находятся на нужных местах), данные из файла заносятся в БД, если нет - программа ругается на тупого пользователя и переходит к разбору следующего файла, либо завершает работу, если её покормили с STDIN.
_________________ Люблю свободный полёт... :) |
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
AnrDaemon : |
Ещё раз - имени файла может просто НЕ БЫТЬ!
|
Ага. В виндовом оконном приложении. Расскажи мне, мил человек, как ты себе это представляешь? А самое главное - зачем ты себе это представляешь? Не надо так больше делать.
В задании ведь явно сказано: есть файлы. У файлы есть имя. Внутри каждого файла его имя дублируется. Зачем оно так, почему оно так, и как бы оно могло бы быть, если бы у бабушки были яйки, а у дедушки выросли сосцы - не забота разработчика.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
M.Hunter
515 EGP
    Репутация: 44 Сообщения: 2363 Откуда: Казань Зарегистрирован: 28.03.2002
 |
|
Реализовал просмотр ДБ и редактирование через DataGrid с помощью такого кода
Код: |
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XmlData.FileDBDataSetTableAdapters;
namespace XmlData
{
class DataProvider
{
private static FileDBDataSet fileDataSet;
public static FileDBDataSet FileDataSet
{
get
{
if (fileDataSet == null)
{
fileDataSet = new FileDBDataSet();
}
return DataProvider.fileDataSet;
}
}
}
public class XMLDBDataProvider
{
private XmlFilesTableAdapter adapter;
public XMLDBDataProvider()
{
FileDBDataSet dataset = DataProvider.FileDataSet;
adapter = new XmlFilesTableAdapter();
adapter.Fill(DataProvider.FileDataSet.XmlFiles);
dataset.XmlFiles.XmlFilesRowChanged += new FileDBDataSet.XmlFilesRowChangeEventHandler(XMLRowModified);
dataset.XmlFiles.XmlFilesRowDeleted += new FileDBDataSet.XmlFilesRowChangeEventHandler(XMLRowModified);
}
void XMLRowModified(object sender, FileDBDataSet.XmlFilesRowChangeEvent e)
{
adapter.Update(DataProvider.FileDataSet.XmlFiles);
}
public DataView GetXMLDB()
{
return DataProvider.FileDataSet.XmlFiles.DefaultView;
}
}
}
|
А это XAML файл
Код: |
<Window x:Class="XmlData.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XmlData"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Window.Resources>
<ObjectDataProvider x:Key="DataProvider" ObjectType="{x:Type local:XMLDBDataProvider}"/>
<ObjectDataProvider x:Key="XmlFiles" ObjectInstance="{StaticResource DataProvider}" MethodName="GetXMLDB"/>
<local:FileDBDataSet x:Key="fileDBDataSet"/>
<CollectionViewSource x:Key="xmlFilesViewSource" Source="{Binding XmlFiles, Source={StaticResource fileDBDataSet}}"/>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource XmlFiles }}">
<DataGrid x:Name="myDataGrid" HorizontalAlignment="Left" Margin="73,39,0,0" VerticalAlignment="Top" Height="148" Width="355" ItemsSource="{Binding}"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="73,246,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="208,246,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
</Grid>
</Window>
|
Проверку имени файла организовал через Regex
Код: |
class CheckName
{
static string filePath = @"C:\Users\Michael\YandexDisk\Projects\data\абв_1234567890_ак45.xml";
static string filename = System.IO.Path.GetFileNameWithoutExtension(filePath);
public void isValid()
{
string[] fileSplit = filename.Split('_');
if ((Regex.IsMatch(fileSplit[0], "^[А-Яа-я]+$") & fileSplit[0].Length <= 100) & (Regex.IsMatch(fileSplit[1], @"^\d{1}$|^\d{10}$|^\d{14,20}$")) & (fileSplit[2].Length <= 7))
{
MessageBox.Show("Все ок");
}
else MessageBox.Show("Bad");
}
} |
добавлено спустя 4 минуты:
Теперь думаю как все таки реализовать загрузку xml файла в базу. Хочу при нажати на кнопку открывать файловый диалог, в котором выбирать любой xml файл, после этого проверять название файла и если все ок загружать его в базу.
добавлено спустя 1 минуту:
Прикладываю архив с проектом.
XmlData.zip |
Описание: |
|
Имя файла: |
XmlData.zip |
Размер файла: |
1.06 MB |
Скачано: |
371 раз(а) |
Последний раз редактировалось: M.Hunter (10:01 24-05-2015), всего редактировалось 2 раз(а) |
|
|
Minx
1011 EGP
        Рейтинг канала: 2(19) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Grebomet : |
И будет две проблемы: программа и регексп.
|
И все таки эти две "проблемы" (;
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
M.Hunter
515 EGP
    Репутация: 44 Сообщения: 2363 Откуда: Казань Зарегистрирован: 28.03.2002
 |
|
Minx : |
Grebomet : |
И будет две проблемы: программа и регексп.
|
И все таки эти две "проблемы" (;
|
Да ладно Оказалось не слижком сложно, и код занимает намного меньше места. Осталось только присобачить ''ne проверку в нужном месте, пока не знаю как.
|
|
|
Grebomet
1466 EGP
      Рейтинг канала: 8(759) Репутация: 261 Сообщения: 4787 Откуда: Питербурх Зарегистрирован: 06.01.2003
 |
|
M.Hunter : |
Осталось только присобачить ''ne проверку в нужном месте, пока не знаю как.
|
Ну, очевидно, когда ты грузишь файл, то вызывешь свою проверку сначала на имени файла, потом на имени, прочитанном из файла.
Читаешь файл, ясенпень, не сразу в базу, а в промежуточный буфер какой-нибудь. Если все проверки прошли - добавляешь данные в БД, если не прошли - кидаешь эксепшен и ловишь его где-нить в там, где начинал грузить файл.
_________________ Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов. |
|
|
|
|
|
Железный канал: «C#» |
|