На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Из ТХТ с разделителями в MS SQL , Вопрос по работе с содержимым ТХТ файла
    Доброе время суток Ув. Коллеги!

    Появилась необходимость написать программу загрузки данных из *.ТХТ файла в MS SQL базу.
    ТХТ файл состоит из строк с несколькими типами разделителей, что то типа 1)[:]Фрукты[:]Яблоки[:]Шт[:] и т д. каждая запись через разделитель относится к разной таблице в бд.
    У меня соображений вообще никаких, среду Visual Studio\VB вижу 1ый раз, а ТХТ это выгрузка написанная на 1с =)
    Те куски кода и описания методов что я нашёл - не подходят, ошибки в синтаксисе - это меня вводит в ступор :wall: Подскажите пожалуйста как это реализовать.
    Заранее благодарен за любую помощ.

    С уважением.
      Весьма похожая тема (для чтения и разделения)
        Цитата Black Star @
        Весьма похожая тема (для чтения и разделения)

        Ну там далеко не полная задача, а так, тему я ту конечно же читал.
        В пятницу код запостить не успел, собственно вот что я родил, сильно только не пинай =(
        ExpandedWrap disabled
            Dim FileNum As Integer
                  Dim Txt As String
                  Dim Test() As String
                  Dim Counter As Integer
                  FileNum = FreeFile()
                  FileOpen(1, "c:\1.txt", OpenMode.Input)
                  FileOpen(2, "c:\2.txt", OpenMode.Output)
                  Do While Not EOF(1)
           
                      Txt = LineInput(FileNum)
                      Test = Split(Txt, "[:]")
                      For Counter = Test.GetLowerBound(0) To Test.GetUpperBound(0)
           
                      Next
           
                      ListBox1.Items.Add(Txt.ToString())
                      Write(2, Txt)
                  Loop
                  FileClose(FileNum)

        Покритикуйте пжалста, как работает я не понимаю, но выводит или тоже самое что в тхт1 или же тоже самое но без разделителей.
        Test выводит тоже самое без разделителя, Txt целиком строчку из 1ого текстовика, Counter считает записи перед разделителем вроде.
        Сообщение отредактировано: Chilly -
          Вот что получилось со Splitом:
          ExpandedWrap disabled
                    Dim FileNum As Integer
                    Dim S As String
                    Dim Ars() As String
                    FileNum = FreeFile()
                    FileOpen(1, "c:\1.txt", OpenMode.Input)
                    FileOpen(3, "c:\Artikul.txt", OpenMode.Output)
                    Do While Not EOF(1)
                        S = LineInput(FileNum)
                        Ars = S.Replace("[:]", ":").Split(":"c)
                        For i As Integer = 0 To Ars.Length - 1
                            Debug.Print(Ars(i))
                        Next i
                        WriteLine(3, Ars(1))
                    Loop
                    FileClose(1)

          Вопрос такой, как написать условие на разделитель, чтобы читались строки из ТХТ с разделителем "1)" ? точнее это даже не разделитель а нумерация, выглядит вот так:
          1)[:]Яблоки[:]
          2)[:][:]
          3)[:][:]
          Хотябы теоретически как это можно реализовать. Заранее спасибо.
            Цитата Chilly @
            Вопрос такой, как написать условие на разделитель, чтобы читались строки из ТХТ с разделителем "1)" ? точнее это даже не разделитель а нумерация, выглядит вот так:

            Каков смысл терминов "условие на разделитель"? И что значит "читались строки из ТХТ с разделителем "1)" "?
            Ибо "Моя твоя не понимай". То ли надо считать строку и если она начинается с "1)" что-то с ней сделать, то ли что другое. Если первое, то If тебе в руки.
            З.Ы. Вопрос то по VB.NET, может перенести?
              Цитата Chilly @
              Ars = S.Replace("[:]", ":").Split(":"c)

              Можно сразу юзать Split("[:]")
              В остальном
              Цитата Viper @
              "Моя твоя не понимай"
                Цитата Black Star @

                Можно сразу юзать Split("[:]")

                У него VB.NET, там разделитель должен из одного символа быть. По крайней мере я вариант со строкой из трех символов не обнаружил.

                Добавлено, хотя нет, есть вариант:
                ExpandedWrap disabled
                  Ars = Split(s, "[:]")
                Сообщение отредактировано: Viper -
                  Большое спасибо ;) всё получилось.
                  С разделителем я думаю всё понятно, я даже нарисовал, просто стебёте)
                  А условие это
                  ExpandedWrap disabled
                    If Ars(0) = ("1)") Then ;)

                  ExpandedWrap disabled
                     Ars = S.Replace("[:]", ":").Split(":"c)
                     
                     For i As Integer = 0 To Ars.Length - 1
                                    
                     Next i

                  Вопрос, теперь как записи Ars(n) запихнуть в MS SQL ?
                    M
                    Тема перенесена из Visual Basic -> Visual Basic. Общие вопросы.
                      Добрый день.
                      Пытаюсь добавить запись в MS SQL:
                      Validate()
                      GoodsBindingSource.EndEdit()
                      GoodsTableAdapter.Update(_1cuploadDataSet)
                      Точнее добавляю строчку, вижу её в датагриде, но обновить при этом таблицу не могу.
                      Пишет ошибку неверная таблица [owner'создатель таблицы].Goods ... хотя из неё он берёт данные, отображает 1 запись которую я добавил через sql manager. Invalid object Name 'SQLSystemVariables' <----
                      Побившись денёк головой я наткнулся на свою проблему в инете: http://www.axapta.mazzy.ru/lib/sqlsystemvariables/
                      Там сказано что эта ошибка возникает при переносе базы, дай дейтвительно я её перенёс.
                      Вот объяснение проблемы:
                      Проблема состоит в том, что MS SQL внутри работает не с текстовым именем bmssa, а с числовым идентификатором, который привязан к этому имени. Когда вы переносите базу имя bmssa и идентификатор переносится без изменений. Но идентификатор пользователя на новом сервере другой! Поэтому MS SQL не может связать базу данных с другого сервера с пользователем на вашем сервере.
                      С того же ресурса я взял скрипт который должен был поправить ситуацию, sp_change_users_login 'Auto_Fix', 'bmssa'.
                      Но чуда не произошло, ничего не исправилось.
                      Вообщем поматерившись я взял и в ручную пользователя перебил на dbo ... но для него не могу указать логин. логин пустой ... при попытки добавить логин вылезает очередная ошибка. Пробовал поправить ODB ... ошибка Msg 15287.
                      В вижуале добавляю конект к бд, логинюсь под админом, все права стоят, транспортирую бд, создаётся датасет, пытаюсь достучаца до нужной мне таблицы, Goods ... так вот при обновлении её она показывает мне бальшой при бальшой Х с таким вот кодом ошибки
                      INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_Goods_Measures'.
                      The conflict occurred in database '1cupload', table 'Measures', column 'ID'.
                      The statement has been terminated.
                      Никакого обновления конечно же не происходит. всё это меня уже зае ... и как это решить я незнаю. склоняюсь к мысли что нужно делать новую бд и никуда её больше не переносить.
                      Помогите пожалуйста решить эту проблему ...
                        Цитата Chilly @
                        Появилась необходимость написать программу загрузки данных из *.ТХТ файла в MS SQL базу.

                        в принципе SQL сервер сам умеет грузить данные из текстовыйх файлов, и делать он это будет на порядки быстрее чем будет проводится загрузка средствами ADO.NET...
                          Цитата farad @
                          Цитата Chilly @
                          Появилась необходимость написать программу загрузки данных из *.ТХТ файла в MS SQL базу.

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

                          Дело в том что там в текстовике полная каша, с импровизированным разделителем. Их даже не один тип. 1 тип разделителей делит записи, потом цыфрами со скобкой делятся строки, так просто не загрузишь её в MS SQL. Да и я не гонюсь за скоростью ... это сделано для того чтобы по скрипту эта софтинка работала сама, у неё есть 12 часов))
                            Chilly я не совсем понял чего-ты от меня хочешь(то что ты в личке просил), у меня нет аськи, поэтому я сюда напишу. Вот пример создания таблицы и загрузки в нее одной записи. Для твоей задачи нужно указать твою строку подключения к серверу и правильно определить типы колонок, в примере для простоты это текст... Пример на шарпе, на васике как-то похоже должно быть..

                            ExpandedWrap disabled
                                          using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\test.accdb"))
                                          {
                                              using(OleDbCommand comm =
                                                       new OleDbCommand("create table table1 (column1 varchar(100),column2 varchar(100));",conn))
                                              {
                                                  conn.Open();
                                                  
                                                  //создание таблицы
                                                  comm.ExecuteNonQuery();
                                                  
                                                  //формирование команды вставки строки в таблицу
                                                  comm.CommandText = "insert into table1 (column1,column2)values(?,?)";
                                                  comm.Parameters.Add(new OleDbParameter("par1", OleDbType.VarChar, 100, "column1"));
                                                  comm.Parameters.Add(new OleDbParameter("par2", OleDbType.VarChar, 100, "column2"));
                                                  
                                                  //загрузка одной строки - повторять столько раз сколько строк собираешься грузить
                                                  comm.Parameters["par1"].Value = "значение в колонке 1";
                                                  comm.Parameters["par2"].Value = "значение в колонке 2";
                                                  comm.ExecuteNonQuery();
                                              }
                                          }
                            А то что у тебя первичные ключи не клеятся - значит как-то их править надо
                              Цитата
                              я не совсем понял чего-ты от меня хочешь(

                              Как я делал: Чтобы закинуть данные в MS SQl ... создал бд в MS SQL, в вижуале законектился, добавил сорс, создался грубо говоря образ моей бд в вижуале, DataSet.Всё. теперь через тейбл адаптер я могу обращаться к таблицам и вносить изменения, они вводятся в датасет который мы потом обновляем а тот в свою очередь синхронизируется с MS SQLем. 1ый раз, до описанный выше ошибки всё работало ... потом бд заглючила, тк я её переносил, после чего я психанул и сделал всё тоже самое с нуля. Но теперь я не могу обратится к dataset'y и я не могу понять почему, пишет что датасет не определён, мне говорят - А почему он не определён ? да я его и в первом случаи не определял всё должно работать как в 1ый раз, датасет добавился и прописались все адаптеры. Сейчаз я сравнил код прошлого датасета с этим ... код одинаковый ... но один хер вижуал упорно ругается что датасет не определён ! где какой строчки нехватает .. что нужно объявить чтобы он видел этот сраный датасет.
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0394 ]   [ 16 queries used ]   [ Generated: 27.04.24, 19:26 GMT ]