はじめまして。

HTMLファイルのタグ以外のデータを最終的にCSVファイル(カンマ区切り)に
落としたいのですが、このプログラムをPerlで書かなければなりません。

ツリー構造を利用?して書くと言われましたが、良くわかりません。
Perlも始めたばかりなので、わかる方は教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

アンケートフォームにユーザが入力したデータが、どうして html になっているのかがよくわからないのですが。

よくあるのは、アンケートフォームの各入力項目を cgi プログラムにわたしてしまうやりかたですが、それを perl で作ったとしても、html を解析するという事態は起きません。

なにか、あまり一般的でないようなことをしようとしているように読めてしまいますが、もうすこし問題を分析した方がいいでしょうね。

この回答への補足

本当に説明不足ですいません。

過去、アンケートを取ったものをソース(HTMLファイル)として、とってあります。それが、500件ほどあります。そのソースはもちろん<HTML><HEAD><TITLE>アンケート</TITLE>.....となっています。この「アンケート」という部分を抜き出し、CSVファイルとして保存し直したいという事です。

最終的にこのCSVファイルからMSAccessへ移し、DB管理していきたいのが狙いです。
500件という膨大な量がありますし、秀丸マクロと手作業でも構いませんが、
出来ればPerlスクリプトで実行したいのです。

補足日時:2001/04/06 10:13
    • good
    • 0
この回答へのお礼

色々と有難うございました

お礼日時:2001/04/06 14:48

例えば、どんな html ファイルを、どんな csv ファイルに変換するのでしょう?



html の文書は、基本的には階層構造をしています。ですから、一般の html の文書を csv の行列の形に一意に変換できるとは思えないのですが。html 文書に何らかの制約があるとか、その内の特定の構造の部分だけ抜き出すというわけでもないのですか?

あと、一般の html 文書を解析するには perl の HTML::Parser (と HTML::Tagset ?)というモジュールを、どこかから入手する方がいいでしょう。しかし、これもかなり複雑で、html の解析のことや、perl をだいぶ知ってないと使えないような気がします(私は使ったことないですが)。日本語を対象にするには、日本語対応の perl の方がいいでしょうし。

いずれにしても、まずは、何をしたいのかを明確にすることですね。

この回答への補足

例えば、アンケートフォームなどユーザが入力した文章をCSVファイルに落としたいということです。

説明がうまくいかなくてすいません。

補足日時:2001/04/05 21:48
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qカンマ区切りのCSVファイルから""を削除したい

初めて質問いたします

以下のような形式のCSVファイルがあります
例)
品名,数量,単価,金額
"りんご",1,150,150
"バナナ",10,200,2000
"メロン","1,000","2,000","2,000,000"

上記のように、品名にはダブルクォーテションがつき、
数量、単価、金額については桁区切りのカンマが発生する場合、ダブルクォーテーションで囲まれています

上記のようなデータを
りんご,1,150,150
バナナ,10,200,2000
メロン,1000,2000,2000000
のように別ファイルへ出力するにはどのようにすればよいでしょうか?

プログラムでの処理で、WSHを使ったものを教えていただけますと、幸いです
よろしくお願いいたします

Aベストアンサー

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = BaseFolder.Path & "\" & "_NewFiles"

If oFs.folderExists(newFolder) = False Then
oFs.createFolder (newFolder)
End If

For Each f In BaseFolder.Files
If oFs.GetExtensionName(f) = "csv" Then
Call changeIt(f.Path, newFolder)
End If
Next

MsgBox newFolder & " フォルダ内を検証"


Sub changeIt(orgFname, trgFolder)
Dim oFs
Dim orgF
Dim newF
Dim newFname
Dim buF
Dim oReg

Dim Mcol
Dim M
Dim M1, M2
Const forReading = 1
Const forWriting = 2

Set oFs = CreateObject("Scripting.fileSystemObject")
Set oReg = CreateObject("VBScript.RegExp")
Set orgF = oFs.getFile(orgFname).openAsTextStream(forReading)

newFname = trgFolder & "\" & oFs.getBaseName(orgFname) & "_New.csv"
oFs.CreateTextFile (newFname)
Set newF = oFs.getFile(newFname).openAsTextStream(forWriting)

With oReg
.Pattern = """.*?"""
.IgnoreCase = False
.Global = True
End With

Do Until orgF.atendofstream
buF = orgF.readline
Set Mcol = oReg.Execute(buF)

For Each M In Mcol
M1 = Replace(M.Value, ",", "")
buF = Replace(buF, M.Value, M1)
M2 = Replace(M1, Chr(34), "")
buF = Replace(buF, M1, M2)
Next

newF.WriteLine buF
Loop

orgF.Close: newF.Close
Set Mcol = Nothing
Set oReg = Nothing

End Sub

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = Bas...続きを読む

Qawkでcsvファイルからcsvファイルへ任意の列だ置換する事はできますか?

awkでcsvファイルからcsvファイルへ任意の列だ置換する事はできますか?

a.csvから2列目を読み取ってb.csvの3列目に上書き保存
a.csv内容 b.csv内容 結果
1,2,3,4,5  →  a,b,c,d,e → a,b,2,d,e
6,7,8,9,10    f,g,h,i,j    f,g,7,i,j

色々のサイトを見ながらやってますがうまくいきません。
よろしくお願いします。

Aベストアンサー

paste -d, a.csv b.csv | awk 'BEGIN{FS=",";OFS=","}{print $6,$7,$2,$9,$10}'

awk だけだと少々面倒なので手抜きしました

Q「,」区切りのcsvファイルを検索して文字列抽出したい

環境:windows2000
csvファイル形式:
pat,\path1\path2,\path\path3
pat_a,\path4\path5,\path7\path8
pat_a,\path7\path6,\path8\path9
バッチファイルに引数%A%を渡してcsvファイルを検索します。
検索文字列は引数%A%です。一行目に検索しようとする文字列があると
それを%%Jにset してあげます。最後に渡された引数とセットされた文字列が同じであればOKです。
自分で考えたのですがなかなかうまくいきません。
みなさまのご教授おねがいします。
FOR /F "tokens=1 delims=," %%l in ('findstr /R "%1" rrr.csv') do set palam=%%l
echo "渡された引数 [%1] "
echo "セットされた文字列 [%palam%] "
if "%palam%" NEQ "%1" (
goto :erro_end
)
引数は「pat」を渡したのですがセットされた文字列が「pat_a」
になってしまうんです。

環境:windows2000
csvファイル形式:
pat,\path1\path2,\path\path3
pat_a,\path4\path5,\path7\path8
pat_a,\path7\path6,\path8\path9
バッチファイルに引数%A%を渡してcsvファイルを検索します。
検索文字列は引数%A%です。一行目に検索しようとする文字列があると
それを%%Jにset してあげます。最後に渡された引数とセットされた文字列が同じであればOKです。
自分で考えたのですがなかなかうまくいきません。
みなさまのご教授おねがいします。
FOR /F "tokens=1 delims=," %%l in ('findstr /...続きを読む

Aベストアンサー

カンマをつけてうまくいく理由は、

FOR /F "tokens=1 delims=," %%l in ('findstr /R "^%1," rrr.csv') do set palam=%%l

が処理されるとき、まず
findstr /R "^%1," rrr.csv
の部分が処理されるからです。この時点ではまだカンマでは区切られず、

pat,\path1\path2,\path\path3
pat_a,\path4\path5,\path7\path8
pat_a,\path7\path6,\path8\path9

が findstr にそのまま渡されます。したがって、pat だけで検索すると、pat も pat_a も該当してしまいます。

しかしCSVファイルなので、最初の項目の次には必ずカンマが来ることを利用して、 pat, で検索すると、1行目だけが該当します。

この結果が FOR 文の中で展開され、

FOR /F "tokens=1 delims=," %%l in ("pat,\path1\path2,\path\path3") do set palam=%%l

のようになり、ここではじめて delims=, が効いてカンマで区切られ、palam に pat が代入されます。

カンマをつけてうまくいく理由は、

FOR /F "tokens=1 delims=," %%l in ('findstr /R "^%1," rrr.csv') do set palam=%%l

が処理されるとき、まず
findstr /R "^%1," rrr.csv
の部分が処理されるからです。この時点ではまだカンマでは区切られず、

pat,\path1\path2,\path\path3
pat_a,\path4\path5,\path7\path8
pat_a,\path7\path6,\path8\path9

が findstr にそのまま渡されます。したがって、pat だけで検索すると、pat も pat_a も該当してしまいます。

しかしCSVファイルなので、最初の...続きを読む

QExcelでカンマ区切りの合計をユーザ関数で得たい

1セルにカンマで区切られた数値が入力されています。
別のセルにユーザ関数を使ってカンマ区切りのセルを指定して合計値を算出したいと思っています。
VBAはどの様に記述すればいいのでしょうか。

Aベストアンサー

こんな感じかな?
数値に小数が含まれるかどうか判らなかったのでDouble型にしてあります。
また、文字列等数値変換できないものが混じっていた場合(例:1,A,2)は、それを除いて合計しています。

Function Sample(aRange As Range) As Double
  Dim vData, i
  vData = Split(aRange.Value, ",")
  For i = 0 To UBound(vData)
    If IsNumeric(vData(i)) Then
      Sample = Sample + CDbl(vData(i))
    End If
  Next i
End Function

Q特定のディレクトにあるCSVファイルの一覧、ファイルの中身を取得するバッチコマンドについて

いつもお世話になっております。
以下の内容のバッチコマンドを作成したいのですが、
どのように作成すれば分かりません。

大変申し訳ございませんが、
教えて頂けますでしょうか。

【内容】
1.特定のディレクトにあるCSVファイルの一覧を取得して、
 そのCSVファイルの内容を1行ずつ表示したい。

以上です。
よろしくお願いいたします。

Aベストアンサー

CSVファイルのある特定のディレクトリに
以下の内容でバッチファイルを作成して実行。

@echo off
setlocal enabledelayedexpansion
dir /B *.csv >list.txt
for /F "delims=" %%i in (list.txt) do (
set /P DATA=<%%i
echo !DATA!
)

こういうことかな?


人気Q&Aランキング

おすすめ情報