改行付きCSVファイルの取り込み

[戻る]
たいぞう 2006/06/04(日) 21:53:21
1レコード内に項目に改行コードが入っていると 
"A","B 
","C","D" 
ようなデータを1レコードとして取り込むのに苦労してます 
項目にデータがなく改行コードのみ入ってるのもあり 
"A","B"," 
","D","E" 

スポンサーリンク

たいぞう 2006/06/04(日) 21:59:02
追加です。 
Readln すると改行コードが入っているため切れてしまいます。 
文字コードでレコードの終わりを探してるんですがうまくいきません。 
Excel はうまく取り込んでくれるのですが・・・ 

ん? 2006/06/05(月) 08:40:52
むかし、どっかでレスしたけど思い出せないし、みつからない。 
たぶん、これで改行コード入りが読み込める。 

  TStringListEx =class(TStringList) 
  protected 
    procedure SetTextStr(const aValue: String); override; 
  end; 

implementation 

procedure TStringListEx.SetTextStr(const aValue: String); 
var 
  pChrs, rowStart: PChar; 
  rowString: String; 
  breakChar: Boolean; 
begin 
  {更新開始} 
  BeginUpdate; 
  try 
    Clear; 
    pChrs := Pointer(aValue); 
    if pChrs <> nil then  begin 
      while pChrs^ <> #0 do begin 
        {行開始} 
        rowStart := pChrs; 
        breakChar := not (pChrs^ in [#0, #$0A, #$0D]); 
        while breakChar do begin 
          if pChrs^ = '"' then begin 
            {引用符付き文字列を引用符なし文字列に変換して取得(pChrsのアドレスを進める)} 
            AnsiExtractQuotedStr(pChrs, '"'); 
          end 
          else begin 
            Inc(pChrs); 
          end; 
          breakChar := not (pChrs^ in [#0, #$0A, #$0D]); 
        end; 
        SetString(rowString, rowStart, pChrs - rowStart); 
        {追加} 
        Add(rowString); 
        if pChrs^ = #$0D then Inc(pChrs); 
        if pChrs^ = #$0A then Inc(pChrs); 
      end; 
    end; 
  finally 
    {更新終了} 
    EndUpdate; 
  end; 
end; 

たいぞう 2006/06/05(月) 18:08:41
[[解決]]
ん?さんありがとうございます。 
やり方はちょっと違いますが文字コードを判別して 
うまく取り込めました。 

ぺけぽん 2006/06/06(火) 00:03:25
どのように解決されたのかを、詳しく提示していただけるとみなさんのためにもなると思います。 

ちなみに、項目に「"」が入っている場合でもいけますか? 

"A","BE"F 
","C","D" 

たいぞう 2006/06/06(火) 21:36:20
CSVファイルで 
"A","BE"F 
","C","D" 
のデータは実際あるんでしょうか? 
"BE"F 

の部分です。 
これだと私のやり方だとうまくいかないかも・・・ 
,と"の文字コードを拾ってつなげたのですが・・・ 

ぺけぽん 2006/06/07(水) 22:29:48
>のデータは実際あるんでしょうか? 
>"BE"F 
>" 
用途が分からないのでなんとも言えませんが、上記のパターンも考えられるということを言いたかっただけです。 
データの中に「"」が入る可能性が絶対ないということであれば別ですが。 

Basser 2006/06/08(木) 10:02:28
>>のデータは実際あるんでしょうか? 
>>"BE"F 
>>" 
>用途が分からないのでなんとも言えませんが、上記のパターンも考えられる>ということを言いたかっただけです。 
>データの中に「"」が入る可能性が絶対ないということであれば別ですが。 

括りがおかしいので不正データでいいんじゃないでしょうか? 

FAN 2006/06/08(木) 10:24:39
http://www.rfc-editor.org/rfc/rfc4180.txt 

   7.  If double-quotes are used to enclose fields, then a double-quote 
       appearing inside a field must be escaped by preceding it with 
       another double quote.  For example: 

       "aaa","b""bb","ccc" 

てなわけでCSVとして不正です。 
エスケープされた"を読むのであればこんなのどうでしょう。 
http://freeandnil.ifdef.jp/csv.pas 

スポンサーリンク

追加発言(4ヶ月以上古い記事に書き込めません。)
■ お名前(ペンネーム可)
  
■ メールアドレス(省略可、半角で入力)
  
■ ホームページアドレス(省略可、半角で入力)
  
■ 発言(エラー時再送信禁止)
  ←解決時は質問者本人がここをチェックしてください。
  
■ 書き込み認証キーを入力して下さい(下記のキーを指定して下さい)
  認証キー :   
  認証キー(確認入力用) :   
■ あなたのランクを選択して下さい(省略可)
   なし   初心者    中級者    上級者    常連    IP表示

  

<文字化けする方へ>
この掲示板では稀に「投稿内容」が文字化けするようです。

--- 対応策 ---
任意のテキストエディタに「投稿内容」をコピペして文字コードを「Shift-JIS」で保存します。そのテキストファイルを一旦閉じてから再度、開き内容をコピペしてこの掲示板に投稿して下さい。

※この情報はユーザーの方より教えて頂きました。

Programming Library