2011-06-13 2 views
0

Я пытаюсь найти способ подсчета моих столбцов из плоского файла. На самом деле, все мои столбцы объединены в клетке signe, разделенные символом '|' ,
после различных попыток, похоже, что справиться с этим может только задача скрипта. Кто-нибудь может мне помочь? У меня нет опыта работы с скриптом в C# ou VB.Количество столбцов SSIS из плоского файла

Большое спасибо Эммануэль

Чтобы лучше понять, ниже вывод о том, что я хочу добиться, чтобы. например, одна ячейка, содержащая все заголовки, поступающие из FF. Дело в том, чтобы добраться до этого результата, я добавил вручную на предыдущем шаге (производный столбец) все имена столбцов друг друга, чтобы объединить их с '|' разделитель. Теперь, если мой макет источника FF изменится, он больше не будет работать из-за этого ручного процесса. Поэтому я думаю, что мне придется использовать скрипт вместо этого, который в основном возвращает мое число столбцов (заголовка) в переменной и позволит удалить жестко закодированную часть в производном столбце transfo, например,

ответ

0

Пожалуйста, обратитесь к моим ответам в после Stack Overflow вопросов. Эти ответы могут дать вам представление о том, как загрузить плоский файл, который содержит различное количество столбцов.

  1. Пример в следующем вопросе считывает файл, содержащий данные, разделенные специальным символом Ç (c-cedilla). В вашем случае, разделитель является Vertical Bar (|) UTF-8 flat file import to SQL Server 2008 not recognizing {LF} row delimiter

  2. Пример в следующем вопросе считывает файл EDI, который содержит различные секции с различным числом столбцов. Пакет читает файл, загружая его соответственно родительскими и дочерними отношениями в таблицу SQL. how to load a flat file with header and detail parent child relationship into SQL server

Исходя из логики, используемой в этих ответах, вы также можете подсчитать количество столбцов путем разделения строк в файле разделителем колонке (Vertical Bar |).

Надеюсь, что это поможет.

+0

ОК спасибо большое за ответ, но то, что я в настоящее время пытается сделать это рассчитывать мой заголовок, которые разделены разделителем – largo68

+0

Я знаю, мое объяснение, может быть, не идеально, но как я могу поместить экран Застрелили здесь?, это определенно помогло бы лучше понять мою проблему. – largo68

+0

Я добавил еще текст, но я не уверен, что моя фотография была загружена – largo68

1

Это очень старая нить; однако, я просто наткнулся на аналогичную проблему. Плоский файл с несколькими различными форматами записи внутри. Много разных форматов, не в каком-либо конкретном порядке, то есть у вас может быть 57 полей в одной строке, а затем 59 в следующих 1000, затем 56 в следующем 10000, назад до 57 ... ну, думайте, что у вас есть идея.

Из-за отсутствия лучших идей я решил разбить этот файл на основе количества запятых в каждой строке, а затем импортировать разные типы записей (теперь сгруппированные вместе), используя пакеты SSIS для каждого типа.

Так что ответ на этот вопрос есть, с немного большим количеством кода для создания файлов.

Надеюсь, это поможет кому-то с той же проблемой.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace OddFlatFile_Transformation 
{ 
    class RedistributeLines 
    { 
    /* 
    * This routine opens a text file and reads it line by line 
    * for each line the number of "," (commas) is counted 
    * and then the line is written into a another text file 
    * based on that number of commas found 
    * For example if there are 15 commas in a given line 
    * the line is written to the WhateverFileName_15.Ext 
    * WhaeverFileName and Ext are the same file name and 
    * extension from the original file that is being read 
    * The application tests WhateverFileName_NN.Ext for existance 
    * and creates the file in case it does not exist yet 
    * To Better control splited records a sequential identifier, 
    * based on the number of lines read, is added to the beginning 
    * of each line written independently of the file and record number 
    */ 
     static void Main(string[] args) 
     { 
      // get full qualified file name from console 
      String strFileToRead; 
      strFileToRead = Console.ReadLine(); 

      // create reader & open file 
      StreamReader srTextFileReader = new StreamReader(strFileToRead); 

      string strLineRead = ""; 
      string strFileToWrite = ""; 
      string strLineIdentifier = ""; 
      string strLineToWrite = ""; 
      int intCountLines = 0; 
      int intCountCommas = 0; 
      int intDotPosition = 0; 
      const string strZeroPadding = "00000000"; 

      // Processing begins 
      Console.WriteLine("Processing begins: " + DateTime.Now); 

      /* Main Loop */ 
      while (strLineRead != null) 
      { 
       // read a line of text count commas and create Linde Identifier 
       strLineRead = srTextFileReader.ReadLine(); 
       if (strLineRead != null) 
       { 
        intCountLines += 1; 
        strLineIdentifier = strZeroPadding.Substring(0, strZeroPadding.Length - intCountLines.ToString().Length) + intCountLines; 
        intCountCommas = 0; 
        foreach (char chrEachPosition in strLineRead) 
        { 
         if (chrEachPosition == ',') intCountCommas++; 
        } 

        // Based on the number of commas determined above 
        // the name of the file to be writen to is established 
        intDotPosition = strFileToRead.IndexOf("."); 
        strFileToWrite = strFileToRead.Substring (0,intDotPosition) + "_"; 
        if (intCountCommas < 10) 
        { 
         strFileToWrite += "0" + intCountCommas; 
        } 
        else 
        { 
         strFileToWrite += intCountCommas; 
        } 
        strFileToWrite += strFileToRead.Substring(intDotPosition, (strFileToRead.Length - intDotPosition)); 

        // Using the file name established above the line captured 
        // during the text read phase is written to that file 

        StreamWriter swTextFileWriter = new StreamWriter(strFileToWrite, true); 
        strLineToWrite = "[" + strLineIdentifier + "] " + strLineRead; 
        swTextFileWriter.WriteLine (strLineToWrite); 
        swTextFileWriter.Close(); 
        Console.WriteLine(strLineIdentifier); 
       } 
      } 

      // close the stream 
      srTextFileReader.Close(); 
      Console.WriteLine(DateTime.Now); 
      Console.ReadLine(); 
     } 
    } 


} 
Смежные вопросы